用vc++写组合数函数,在n个人中选k个人,求有多少种选法
时间: 2024-09-18 17:00:53 浏览: 37
在C++中编写计算组合数(Combination)的函数,可以利用动态规划的思想,因为组合数有一个公式 C(n, k) = n! / (k!(n-k)!), 其中 "!" 表示阶乘。这个函数通常是递归实现的,但也经常使用迭代来避免栈溢出的问题。
下面是一个简单的迭代版本的组合数函数实现:
```cpp
#include <vector>
int combination(int n, int k) {
std::vector<int> fact(1001, 1); // 初始化前1001个数字的阶乘,用于计算
for (int i = 2; i <= n; ++i)
fact[i] = i * fact[i - 1];
if (k > n || k < 0 || n < 0)
return 0; // 输入非法
return fact[n] / (fact[k] * fact[n - k]);
}
// 示例
int main() {
int n = 10;
int k = 5;
int result = combination(n, k);
std::cout << "组合数 C(" << n << ", " << k << ") = " << result << std::endl;
return 0;
}
```
在这个函数里,我们先预计算了部分阶乘值存储在一个数组`fact`中,然后根据组合数公式计算并返回结果。注意输入的k和n需要满足0 <= k <= n的要求,否则函数会返回0表示非法组合。
阅读全文