2011年11月9日水曜日

重複組み合わせの全組み合わせを表示

重複組み合わせの全組み合わせを表示するプログラムです。
今回種類が3なのでループも3重になります。
種類の数でループの深さが決まります。

#include

#define KYOTEN 3
#define NUMBER 5

//3H5=7C5=21通り

int fact(int);

void main() {
int k1, k2, k3, i = 1;

printf("今回はK=%d, N=%dで%dH%d=%dC%dとなり%d通りあります\n", KYOTEN, NUMBER, KYOTEN, NUMBER, KYOTEN+NUMBER-1,NUMBER, fact(KYOTEN+NUMBER-1)/(fact(NUMBER)*fact(KYOTEN-1)));

for(k1 = 0; k1 <= NUMBER; k1++) {
for(k2 = 0; k1+k2 <= NUMBER; k2++) {
for(k3 = 0; k1+k2+k3 <= NUMBER; k3++) {
if(k1+k2+k3 == NUMBER)
printf("%d番目 %d %d %d\n",i++, k1, k2, k3);
}
}
}
}

//階乗関数
int fact(int num){
int i;
if(num == 1){
return 1;
} else {
i = num * fact(num - 1);
return i;
}
}

0 件のコメント:

コメントを投稿