OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

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

  • 困ってます
  • 質問No.218613
  • 閲覧数34
  • ありがとう数0
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 13% (5/36)

=得点の付け方=
連続した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点

組み合わせの取り方で得点が異なり、最大得点を得るためにはどういった
ように考えればよいのでしょう?
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答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;
}


おそらく、あらかじめ組み合わせリストを作成するよりも、再帰的に総当たりしていって、得点が以前のものを上回ったときに、その組み合わせを保存するようなコードを作成したほうがシンプルになると思います。
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル12

ベストアンサー率 35% (302/848)

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

以上。
補足コメント
googlegoogle

お礼率 13% (5/36)

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)といったように一般化してです。
投稿日時 - 2002-02-16 20:06:46


このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ