您的位置:首页 > 其它

一道组合数问题

2011-05-15 22:05 225 查看
#include <stdio.h>

void CombNumber(int a[], int m, int n, int h, int *count);

int main()
{
int m, n;
int count = 0;
static int Res[100];

printf("Please input the number m and n :/n");
scanf("%d%d", &m, &n);

printf("The combination number is :/n");
CombNumber(Res, m, n, 0, &count);
printf("The res has %d ways:/n", count);
puts("");
return 0;
}

void CombNumber(int Res[], int m, int n, int h, int *count)
{
int i = 0, j = 0, k = 0;

if(n == h) //条件成立打印结果
{
(*count)++;
for(i = 0; i <= h; ++i)
{
printf("%d", Res[i]);
}
printf("/b/t");
return;
}

for(j = 1; j <= m; ++j)
{
for(k = 0; k < h; ++k)
{
if(j == Res[k] /*|| Res[k] > j*/) //判断当前数字是否已在结果数组中
{
break;
}
}
if(k >= h)
{
Res[h] = j;
CombNumber(Res, m, n, h + 1, count);
}
}
}
/*
Please input the number m and n :
5 3
The combination number is :
123 124 125 132 134 135 142 143 145 152
153 154 213 214 215 231 234 235 241 243
245 251 253 254 312 314 315 321 324 325
341 342 345 351 352 354 412 413 415 421
423 425 431 432 435 451 452 453 512 513
514 521 523 524 531 532 534 541 542 543
The res has 60 ways:

Press any key to continue
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: