Cのアルゴリズムで – プログラミング – Home

通知
すべてクリア

[解決済] Cのアルゴリズムで


てっちゃん
 てっちゃん
(@てっちゃん)
ゲスト
結合: 22年前
投稿: 5
Topic starter  

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といった組み合わせは同じものと考えます
ただ作るだけだったらできるのですが、何かいいアルゴリズムはないでしょうか?


引用未解決
トピックタグ
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

> ただ作るだけだったらできるのですが、何かいいアルゴリズムはないでしょうか?

てっちゃんさん(さんはいらんか)が作ってものをここに載せてはいかがですか?


返信引用
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

> てっちゃんさん(さんはいらんか)が作ってものをここに載せてはいかがですか?

と思ったけど、思いついたので作りました。

#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;
}


返信引用
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

と思ったけど、関数名が間違いですね。
順列(Permutation)でなく組合せ(Combination)でした。


返信引用
てっちゃん
 てっちゃん
(@てっちゃん)
ゲスト
結合: 22年前
投稿: 5
Topic starter  

作ったプログラムは削除してしまったので・・・
再帰使わずにカウンタを回すようなイメージで作ったのですがみにくくなってしまったので消し
ました
↑のだとすっきりしててわかりやすいです
僕の作ったのは人が見てもすぐにわかるものじゃなかったので
レスありがとうございました


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました