根据递推式子C(m,n)=C(m-1,n)+C(m-1,n-1),求组合数C(m,n)。注意递推的终止条件是C(m,1)=m;以及一些m和n取值的一些特殊情况,如m < 0或n < 0或m < n时,C(m,n)值为0,m和n相等时,C(m,n)=1等。用c语言编写程序
时间: 2024-02-22 16:55:54 浏览: 221
C语言程序设计-编写程序。从键盘读入8个整数存入数组a中并输出这8个数据。和、最大值、最小值及平均值。正数之和、负数之和
5星 · 资源好评率100%
以下是用 C 语言编写的程序,能够根据递推式子计算组合数 C(m,n):
```c
#include <stdio.h>
int combination(int m, int n) {
if (m < 0 || n < 0 || m < n) {
return 0;
} else if (m == n || n == 0) {
return 1;
} else {
int C[m+1][n+1];
for (int i = 0; i <= m; i++) {
C[i][0] = 1;
}
for (int j = 1; j <= n; j++) {
C[0][j] = 0;
}
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
C[i][j] = C[i-1][j] + C[i-1][j-1];
}
}
return C[m][n];
}
}
int main() {
int m, n;
printf("请输入m和n的值:");
scanf("%d %d", &m, &n);
printf("C(%d, %d) = %d\n", m, n, combination(m, n));
return 0;
}
```
程序中,我们使用一个二维数组 `C` 来保存计算出来的组合数。首先,我们对 `C` 进行初始化,使得 `C[i][0] = 1`,`C[0][j] = 0`。然后,我们使用双重循环来计算 `C(m,n)`,即 `C[m][n] = C[m-1][n] + C[m-1][n-1]`。最后,输出计算出来的结果即可。
需要注意的是,当 `m < 0` 或 `n < 0` 或 `m < n` 时,组合数的值为 0。当 `m == n` 或 `n == 0` 时,组合数的值为 1。这些情况也需要在程序中进行判断。
阅读全文