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;
}
おそらく、あらかじめ組み合わせリストを作成するよりも、再帰的に総当たりしていって、得点が以前のものを上回ったときに、その組み合わせを保存するようなコードを作成したほうがシンプルになると思います。
No.1
- 回答日時:
体系化された得点配分ではないので、全部の組み合わせを試すのが最良の方法と思われます。
例示されている通りに5つの数字に対する得点を考えるとすれば、その組み合わせ数は、(3つの数字の組み合わせ、2つの数字の組み合わせ) = 10通り
(3つの数字の組み合わせ、1つの数字、1つの数字) = 10通り
(2つの数字の組み合わせ、2つの数字の組み合わせ、1つの数字) = 15通り
(2つの数字の組み合わせ、1つの数字、1つの数字、1つの数字) = 10通り
(全部1つの数字) =1通り
となり、合計46通りを調べれば済みます。プログラムで組むとすれば、簡単な話ですね。
以上。
この回答への補足
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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 統計学 投票のジレンマ。 3 2023/05/13 22:16
- 高校受験 行きたい高校があるんですが、内申点が足りるかわかりません。私の県は中3の1学期と2学期の合計が内申点 1 2022/12/01 17:03
- 数学 数学の一次関数の問題解いて欲しいです!お願いします! 次の直線の式を求めなさい ・傾きがー3/5で、 6 2022/08/24 23:30
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- 高校受験 成績について 2 2022/10/26 10:18
- 認知障害・認知症 認知症を理解出来る 分かりやすい本や漫画本のお薦めを教えて下さい または、分かりやすいHPサイトも有 1 2022/08/28 18:40
- 日本語 箱の中に,1 と書かれたカードが 3 枚,2 と書かれたカードが 2 枚,0 と書かれた カ 4 2022/03/31 13:46
- 中学校 中1数学 比例のグラフの座標の読み取り 4 2023/03/28 12:26
- 数学 ヒストスプライン平滑化をする際の節点の決め方ついて教えてください。 9 2022/08/08 16:17
- 数学 条件付き極値問題といわれる問題です。ラグランジュの乗数法 について、質問したいことがあります。 条件 3 2023/05/15 21:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語での引数の省略方法
-
「指定されたキャストは有効で...
-
#define _CRT_SECURE_NO_WARNIN...
-
複数桁10進数の*桁目だけを抽出...
-
(int *)の意味
-
卒業研究でよく分からないとこ...
-
ラップ関数とはどんなものですか?
-
if と配列の組み合わせ
-
C言語初心者です、、、お助けく...
-
【C++】関数ポインタの使い方
-
アスタリスクで正方形
-
インライン展開されているか確...
-
構造体の勉強中です 合計点の高...
-
異なる文字列のマッチングを、D...
-
数字列を3桁ごとにカンマで区切...
-
C言語 配列と関数の練習問題
-
C言語で三目並べをするプログラ...
-
入力を待たずにstdinの監視をし...
-
ファイルから読みこむ方法
-
課題でつまってます・・・
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
複数桁10進数の*桁目だけを抽出...
-
#define _CRT_SECURE_NO_WARNIN...
-
ラップ関数とはどんなものですか?
-
卒業研究でよく分からないとこ...
-
【C++】関数ポインタの使い方
-
実数の整数部,小数部の取得
-
std::set<int> で、ある値が何...
-
C言語 エラーの原因がわからな...
-
c言語
-
system関数がうまくいかない
-
C++でvectorにテキストファイル...
-
acceptをalarmでタイムアウトさ...
-
if と配列の組み合わせ
-
return 1L
-
「{ } で囲むだけ」は正しい?
-
(マルチスレッド)_beginthrea...
-
PowerShellがうまくいかない
-
このプログラミング誰か教えて...
おすすめ情報