c++写组合数公式代码
时间: 2024-03-05 10:27:14 浏览: 16
可以使用递归公式计算组合数,也可以使用杨辉三角等方式来计算。以下是使用递归公式计算组合数的代码:
```c++
#include <iostream>
int combination(int n, int k) {
if (k == 0 || k == n) {
return 1;
} else {
return combination(n-1, k-1) + combination(n-1, k);
}
}
int main() {
int n, k;
std::cout << "Enter n and k: ";
std::cin >> n >> k;
std::cout << "C(" << n << "," << k << ") = " << combination(n, k) << std::endl;
return 0;
}
```
其中 `combination` 函数使用了递归公式 C(n,k) = C(n-1,k-1) + C(n-1,k) 来计算组合数。如果 k 等于 0 或 n,返回 1;否则递归计算 C(n-1,k-1) 和 C(n-1,k) 并相加返回结果。
相关问题
问题 F: 零基础学C/C++166——求组合数
问题 F: 零基础学C/C++166——求组合数是一个关于求组合数的问题。在给定的代码中,使用了一个名为fact的函数来计算阶乘。在主函数中,通过输入n和m的值,计算了a、b和c的值,然后使用公式a/(b*c)来计算组合数,并输出结果。这段代码的作用是计算给定n和m的组合数。
#### 引用[.reference_title]
- *1* *2* *3* [浙江理工大学 我的编程之路 零基础学C/C++ ACM入队 200 题](https://blog.csdn.net/qq_34010538/article/details/120595647)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
计算组合数c
可以使用递推公式计算组合数,也可以使用递归或记忆化搜索实现。以下是一个使用递推公式的C++代码示例:
```c++
#include <iostream>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
int c[n+1][m+1];
for (int i = 0; i <= n; i++) {
for (int j = 0; j <= min(i, m); j++) {
if (j == 0 || j == i) {
c[i][j] = 1;
} else {
c[i][j] = c[i-1][j-1] + c[i-1][j];
}
}
}
cout << c[n][m] << endl;
return 0;
}
```
这个程序使用了二维数组 `c` 存储组合数,其中 `c[i][j]` 表示从 `i` 个元素中选出 `j` 个元素的组合数。根据组合数的递推公式,我们可以得到以下代码:
```
if (j == 0 || j == i) {
c[i][j] = 1;
} else {
c[i][j] = c[i-1][j-1] + c[i-1][j];
}
```
这个公式的意思是,当 `j` 等于 0 或者等于 `i`(即选出的元素个数等于总元素个数)时,组合数为 1;否则,我们可以把选出的 `j` 个元素分为两部分,一部分包括第一个元素,另一部分不包括第一个元素,这样可以得到递推公式 `c[i][j] = c[i-1][j-1] + c[i-1][j]`。
在程序的主函数中,我们首先获取用户输入的 `n` 和 `m`,然后使用 `for` 循环计算 `c` 数组中所有的组合数。最后输出 `c[n][m]` 即可。