C语言用动态规划求组合数(C nm)代码
时间: 2024-12-14 08:21:44 浏览: 2
在C语言中,动态规划是一种解决问题的有效方法,特别是在需要计算组合数的情况下。组合数,通常表示为C(n, m),是指从n个不同元素中选取m个元素的不同排列方式的数量。经典的递推公式是`C(n, m) = C(n-1, m-1) + C(n-1, m)`,当0 <= m <= n时。
下面是一个简单的动态规划函数,用于计算组合数:
```c
#include <stdio.h>
int factorial(int n) {
if (n == 0 || n == 1)
return 1;
else
return n * factorial(n - 1);
}
int combination(int n, int m) {
if (m > n || m < 0)
return 0; // 根据组合数定义,m 必须在 0 到 n 之间
int c = factorial(n) / (factorial(m) * factorial(n - m));
return c;
}
int main() {
int n, m;
printf("请输入n和m的值:");
scanf("%d %d", &n, &m);
int result = combination(n, m);
printf("C(%d, %d) = %d\n", n, m, result);
return 0;
}
```
在这个代码里,我们首先定义了一个计算阶乘的辅助函数`factorial()`,然后使用这个函数来计算组合数。注意,为了避免整数溢出,这里使用了除法运算而不是乘法。
阅读全文