今回種類が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 件のコメント:
コメントを投稿