计算组合数C(m,n)的值(n<=m<=10)。c++
时间: 2024-01-21 13:18:20 浏览: 31
可以使用组合数公式C(m,n) = m! / (n!(m-n)!),其中"!"表示阶乘,即n! = n*(n-1)*(n-2)*...*2*1。
以下是一个C++程序,用于计算组合数C(m,n)的值:
```cpp
#include <iostream>
using namespace std;
// 计算阶乘
int factorial(int n) {
int result = 1;
for (int i = 1; i <= n; i++) {
result *= i;
}
return result;
}
// 计算组合数
int combination(int m, int n) {
return factorial(m) / (factorial(n) * factorial(m - n));
}
int main() {
int m, n;
cout << "请输入m和n的值(n<=m<=10): " << endl;
cin >> m >> n;
int result = combination(m, n);
cout << "组合数C(" << m << "," << n << ") = " << result << endl;
return 0;
}
```
例如,输入m=5,n=2,则输出组合数C(5,2)的值为10。
相关问题
计算组合数C(m,n)的值(n<=m<=10)。 输入 一行,两个整数m,n 输出 输出组合数c++
这道题可以使用递归或动态规划来解决。
方法一:递归
递归的思路是,如果要求C(m,n),可以先求C(m-1,n-1)和C(m-1,n),然后将它们相加。
代码如下:
```c++
#include <iostream>
using namespace std;
int C(int m, int n) {
if (n == 0 || n == m) {
return 1;
} else {
return C(m-1, n-1) + C(m-1, n);
}
}
int main() {
int m, n;
cin >> m >> n;
cout << C(m, n) << endl;
return 0;
}
```
方法二:动态规划
动态规划的思路是,建立一个二维数组dp,其中dp[i][j]表示C(i,j)的值。首先将dp数组的边界条件初始化为1,即dp[i][0]=1和dp[i][i]=1。然后从dp[2][1]开始,按照递推公式dp[i][j] = dp[i-1][j-1] + dp[i-1][j]计算dp数组的每个元素,最终得到dp[m][n]的值。
代码如下:
```c++
#include <iostream>
using namespace std;
int main() {
int m, n;
cin >> m >> n;
int dp[11][11] = {0};
for (int i = 0; i <= m; i++) {
dp[i][0] = 1;
dp[i][i] = 1;
}
for (int i = 2; i <= m; i++) {
for (int j = 1; j < i; j++) {
dp[i][j] = dp[i-1][j-1] + dp[i-1][j];
}
}
cout << dp[m][n] << endl;
return 0;
}
```
c++编程实现:主函数功能:从键盘输入n和m,通过调用子函数计算组合数c(n,m)=c(n-1,m-1)+c(n-1,m) 并输出。 (2)子函数功能:使用递归法,计算组合数c(n,m)=c(n-1,m-1)+c(n-1,m)
好的,以下是 C++ 代码实现:
```cpp
#include <iostream>
using namespace std;
int comb(int n, int m) {
if (m == 0 || n == m) {
return 1;
} else {
return comb(n-1, m-1) + comb(n-1, m);
}
}
int main() {
int n, m;
cout << "请输入n和m: ";
cin >> n >> m;
cout << "C(" << n << "," << m << ") = " << comb(n, m) << endl;
return 0;
}
```
主函数中首先输入 n 和 m,然后调用子函数 `comb()` 计算组合数。子函数 `comb()` 是递归实现,当 m 为 0 或 n 等于 m 时,组合数为 1;否则,递归计算 C(n-1, m-1) 和 C(n-1, m) 并相加。最后输出结果即可。