• ベストアンサー

最大になるように取る方法

=得点の付け方= 連続した3つの数=5点 連続した2つの数=4点 1つ間のあいた3つの数=3点 1つ間のあいた2つの数=2点 どこにもくつかない数=0点 (23345)→(234)(35)の7点 or (23)(345)の7点 (24468)→(246)(4)(8)の3点 or (24)(468)の5点 組み合わせの取り方で得点が異なり、最大得点を得るためにはどういった ように考えればよいのでしょう?

質問者が選んだベストアンサー

  • ベストアンサー
noname#30727
noname#30727
回答No.2

>こういったcom関数を作りたいのですがどうやったらいいのか分かりません。 あまり良いコードではないかもしれませんが、参考にしてください。com の引数 n と r は nCr を意味します。作成される y は、8C3 の時に、 x = { 1, 2, 3, 4, 5, 6, 7, 8 } y[0] = 1 y[1] = 2 y[2] = 3 y[3] = 1 y[4] = 2 y[5] = 4 y[6] = 1 y[7] = 2 y[8] = 5 という順番になります。 int *y; // y は int[nCr * r] のメモリが確保されている必要がある int *x; // x は int[n] のメモリが確保されていて、適当に初期化されている必要がある void com(int n, int r) { com_sub(y, 0, 0, n, r); } int *com_sub(int *write, int start, int nest, int n, int r) { int i, c; if (nest < r) { for (i = start; i <= n - r + nest; i++) { if (i != start) { for (c = 0; c < nest; c++) { *write++ = *(write - r); } } *write = x[i]; write = com_sub(write + 1, i + 1, nest + 1, n, r); } } return write; } おそらく、あらかじめ組み合わせリストを作成するよりも、再帰的に総当たりしていって、得点が以前のものを上回ったときに、その組み合わせを保存するようなコードを作成したほうがシンプルになると思います。

その他の回答 (1)

  • pancho
  • ベストアンサー率35% (302/848)
回答No.1

体系化された得点配分ではないので、全部の組み合わせを試すのが最良の方法と思われます。例示されている通りに5つの数字に対する得点を考えるとすれば、その組み合わせ数は、  (3つの数字の組み合わせ、2つの数字の組み合わせ) = 10通り  (3つの数字の組み合わせ、1つの数字、1つの数字) = 10通り  (2つの数字の組み合わせ、2つの数字の組み合わせ、1つの数字) = 15通り  (2つの数字の組み合わせ、1つの数字、1つの数字、1つの数字) = 10通り  (全部1つの数字) =1通り となり、合計46通りを調べれば済みます。プログラムで組むとすれば、簡単な話ですね。 以上。

googlegoogle
質問者

補足

x[8]={0,1,2,5,6,7,8,10}; com(8,3);/*組み合わせy[]に入れる関数*/ ↓ y[0]={0,1,2}; y[1]={0,1,5}; y[2]={0,1,6}; ・・・ y[8C3-1]={7,8,10}; こういったcom関数を作りたいのですがどうやったらいいのか分かりません。 助言をお願いします。com(int x,int y)といったように一般化してです。

関連するQ&A

  • 3つの数の最大公約数??(急いでます!)

    出かける前にどうしても知りたいのです! 3つの数の最大公約数は、 どれか2つの最大公約数を求めるだけで できますか?? 例えば(8,20,28)の最大公約数は どの組み合わせでも 4と出ますよね。 どなたか回答宜しくお願いします!!

  • 最大公約数に関する問題です。

    最大公約数に関する問題です。 『2つの整数6186と4709の最大公約数(6189,4709)を求めよ。また、この最大公約数に対して、(6189,4709) = 6186X + 4709YとなるX,Yを見つけよ。』という問題です。最大公約数は1と求められたのですが、後半の『(6189,4709) = 6186X + 4709YとなるX,Yを見つけよ。』は、X,Y の組み合わせが無数にあると思うのですが、どうしたら良いのでしょうか?宜しくお願い致します。

  • 中学の数学の問題(方程式)

    中学の数学の問題(方程式)です。 うまく答えが出せません。よろしくご指導ください。 問題:  合計5名でリーグ戦を行う。得点制とし、勝者は5点、敗者は0点、引き分けの場合は両者とも2点とする。リーグ戦終了後、合計得点で、順位を決める。5人の得点の合計が 45点の時、1位の得点が17点であった。2位の得点として考えられる最大の点数と最小の点数を求めよ。答は最大14点、最小9点となっていますが、どのように導いてよいものやらさっぱり分かりません。よろしくお願いします。 組み合わせ試合総数が10通りあるくらいしか分かりません。

  • mysqlのデータから連続する日数の最大を出す方法

    いろいろと調べたのですが分からなかったので質問させて下さい。 あるMysqlのデータベースにこのようなデータがあるとき、 ID date point ------------ 1 2011-06-12 10 1 2011-06-13 5 1 2011-06-14 10 2 2011-06-09 5 2 2011-06-10 10 2 2011-06-15 5 3 2011-06-09 10 3 2011-06-10 10 3 2011-06-14 5 3 2011-06-15 10 3 2011-06-16 5 ここから各IDごとの最大の連続日数数を抜き出す方法はありますでしょうか? 結果として ID 連続日数 ----------- 1 3 2 2 3 3 といったものを求めています。

  • 確立の問題です

    確立の問題です 0,1,2,3の数字が一つずつ書かれた四枚のカードがある。この四枚のカードから無造為にカードを一枚取り出し、そのカードに書かれた数字を記録し元に戻すという操作を三回行う。このとき、記録した数字のうち、最大の数から最小の数をひいた値を得点とする。ただし、三回の操作で記録した数字がすべて同じときは、最大の数、最小の数ともにその数とする。 (1)得点が0点となる確率を求めよ。 (2)得点が1点となる確率を求めよ。 (3)得点の期待値を求めよ。 (1)は解りました。(2)と(3)がわかりません!どなたか教えてください!! (1)(2)(3)の解答はそれぞれ1/16、9/32、15/8です。

  • 最大公約数??

    今日のyahooニュースで厚生事務次官の事件で 見出しに"異例の警戒=最大公約数で展開" や本文に警察当局の話として”今後も発生が懸念され、最大公約数で捜査と警戒を展開する必要がある”というのが載っていました。 このときの最大公約数とはどういう意味ですか。 yahoo辞書で調べたのですが、最大公約数には 1 《 greatest common measure 》二つ以上の自然数の公約数の中で最大のもの。 2 種々の意見の間にみられる共通点。「多くの発言の中から―を出す」 という2つの意味があり、今回の場合はまず1は違うのはすぐわかるのですが、2でもよく意味がわかりません。 単に"最大規模"の誤りでしょうか? よろしくお願いします。

  • 関数の最大値についてです。

    一般的に、関数がある点で最大値をとるとすると、 その点での2回微分は0以下になりますよね。 そこで、Ω⊂Rを有界領域とします。 u(x)はΩの閉包で連続で、最大値をある点y∈Ωでとるとすると、 d^2u(z)/dx^2はこの場合も0以下になりますか? それとも0になることはなく、必ず負になりますか? よろしければ解説をお願い致します。

  • 数A教えてください・・・!

    A、B二個のさいころを同時に一回投げ、出た目の数について、(*)のように得点を定める。 (*)・出た目の数が同じである時、得点を0点とする。    ・出た目の数が異なり、しかもともに偶数または奇数である時、得点を小さい方の目の数とする。    ・出た目の数が偶数と奇数である時、得点を大きい方の目から小さい方の目の数を引いた値とする。 1、得点の最大点は何点か。また、その時のさいころの目の出方は何通りか。 2、得点が1点となるさいころの目の出方は何通りか。 次に、A、B二個のさいころを同時に投げることを2回行い、(*)により、1回目、2回目で得られた得点をそれぞれX1点、X2点とする。更に、X1、X2の値によって次のように最終得点を定める。 ・X1≦X2であるとき、最終得点をX2点とする。 ・X1>X2であるとき、最終得点を0点とする。 3、最終得点が5点となる確率を求めよ。 4、最終得点が1点となる確率を求めよ。 お願いします!

  • 要素数を最大化する組合せ最適化問題について

    要素数を最大化するような組合せ最適化問題(線形計画問題)を解こうとしていますが、 要素数を一度に計算したり、ソートしたりすることはできません。 (そのような関数を線形式で定義するのは難しいと思いますので。) 一方、2つの要素が同一かどうかのみの計算は簡単にできるので、 全ての2要素間で一致/不一致を判断し、不一致の数が最大となるように目的関数を設定して、この問題を解こうかと思っています。 この方法は正しいでしょうか。 例えば、 ある変数の組合せにおいて、 A1=X, A2=Y, A3=X といった結果になるとすると、 bin1=|A1-A2|(=1、不一致) bin2=|A1-A3|(=0、一致) bin3=|A2-A3|(=1、不一致) という風に要素の一致/不一致を計算し、 不一致数(=bin1+bin2+bin3)を最大化するという風に目的関数を定義しようかと思っています。 当然、不一致数と要素数は一致しないわけですが、 不一致数が最大のときに、必ず要素数が最大となるのであれば、 目的関数として問題ないと考えています。 なんとなく正しい気もしますが、本当に正しいのかよくわかりません。 よろしくお願いします。

  • ウインドウの最大化を防ぐ方法

    ウインドウズXPプロフェッショナル2002サービスパック3 IEは8です。 ノートパソコンを使用していまして、複数のアプリを立ち上げていますが、基本最大化しない人です。 最近、後ろにあるアプリの最上段の青いバーを触ると、最大化して入れ替わるようになってしまいました。 最大化しないでアプリを入れ替えながら仕事をするのが自分の場合は、超効率的なんです。 また、アプリの上の方の青いバーですが、縮小した状態のものを動かそうと、触れるとぷあーっと最大化してしまいます。 最大化は、最大化ボタンを押したときだけに限定したいんです。 この半年ぐらいの間にこのような現象になってしまったのですが、なんとか昔の状態に戻す方法はないでしょうか。仕事の能率がダウンして困っています。。。