C言語であるプログラムを作っているのですが
(例)
1,2,3,4,5,6,7
という数字の中から3つ選んだときの全部の組み合わせをすべて示す
といった感じのものです
全部でいくつ組み合わせがあるかではなくすべての組み合わせを出力するというもので
す
実際に作っているのは数字は可変でいくつ選ぶのかも可変です
1,2,3,4,5 の中から 3つ
1,2,3,4,5,6,7,8,9 の中から 5つ
といった具合です
1,2,3,4,5 の中から 3つ
の例だと
1,2,4と4,1,2といった組み合わせは同じものと考えます
ただ作るだけだったらできるのですが、何かいいアルゴリズムはないでしょうか?
> ただ作るだけだったらできるのですが、何かいいアルゴリズムはないでしょうか?
てっちゃんさん(さんはいらんか)が作ってものをここに載せてはいかがですか?
> てっちゃんさん(さんはいらんか)が作ってものをここに載せてはいかがですか?
と思ったけど、思いついたので作りました。
#include <stdio.h>
#define M 9
#define N 5
int NUM[M];
void Perm(int n, int a)
{
int i;
static int c;
if (n==N) {
printf(%4d : , ++c);
for (i=0;i<N;i++)
printf(%3d, NUM[i]);
printf(\n);
return;
}
for (i=a+1;i<=M;i++) {
NUM[n] = i;
Perm(n+1, i);
}
}
int main()
{
Perm(0, 0);
return 0;
}
と思ったけど、関数名が間違いですね。
順列(Permutation)でなく組合せ(Combination)でした。
作ったプログラムは削除してしまったので・・・
再帰使わずにカウンタを回すようなイメージで作ったのですがみにくくなってしまったので消し
ました
↑のだとすっきりしててわかりやすいです
僕の作ったのは人が見てもすぐにわかるものじゃなかったので
レスありがとうございました