本题要求编写程序,根据公式c n m = m!(n−m)! n! 算出从n个不同元素中取出m个元素(m≤n)的组合数。 建议定义和调用函数fact(n)计算n!,其中n的类型是int,函数类型是double
时间: 2023-05-31 10:19:28 浏览: 143
### 回答1:
可以按照以下步骤编写程序:
1. 定义函数fact(n),计算n的阶乘,返回double类型的结果。
2. 在主函数中,读入n和m的值。
3. 调用函数fact(n)、fact(m)和fact(n-m),分别计算n!、m!和(n-m)!的值。
4. 根据公式计算组合数c(n,m)的值,将结果存储在变量result中。
5. 输出结果result。
以下是示例代码:
#include <stdio.h>
double fact(int n) {
double result = 1.;
for (int i = 1; i <= n; i++) {
result *= i;
}
return result;
}
int main() {
int n, m;
printf("请输入n和m的值:");
scanf("%d%d", &n, &m);
double c = fact(m) * fact(n - m) / fact(n);
printf("从%d个不同元素中取出%d个元素的组合数为%.f\n", n, m, c);
return ;
}
### 回答2:
题目要求我们编写程序,根据公式c n m = m!(n-m)!n! 来算出从n个不同元素中取出m个元素(m≤n)的组合数。为了方便,我们可以先定义一个计算阶乘的函数fact(n),其中n的类型是int,函数类型是double。
接下来我们需要编写一个主函数,来输入n和m的值,并通过调用函数fact(n)来计算m!,n-m!和n!,然后代入公式c n m = m!(n-m)!n!来计算组合数。
以下是代码实现:
#include <iostream>
using namespace std;
double fact(int n){ //计算阶乘
double factorial = 1;
for (int i = 1; i <= n; i++) {
factorial *= i;
}
return factorial;
}
int main(){
int n, m;
cout << "请输入n和m的值:" << endl;
cin >> n >> m;
double cnm = fact(m)/(fact(n-m)*fact(n)); //代入公式计算组合数
cout << "从" << n << "个不同元素中取出" << m << "个元素的组合数为:" << cnm << endl;
return 0;
}
我们通过输入n和m的值,便可以计算出从n个不同元素中取出m个元素(m≤n)的组合数。这样的程序对于数学计算中大量使用的组合数计算来说十分实用,可以有效的避免错误计算,并提高计算速度。
### 回答3:
题目要求编写程序,计算从n个不同元素中取出m个元素的组合数,公式c n m = m!(n-m)! / n! 。建议在程序中定义和调用函数fact(n),计算n的阶乘。函数的类型是double,参数n的类型是int。
首先,在程序中我们需要输入变量n和m,用来计算组合数。然后,我们需要定义阶乘函数fact(n)。
定义函数fact(n)的语句如下:
double fact(int n){
double result = 1.0;
for(int i = n; i >= 1; i--){
result *= i;
}
return result;
}
该函数用循环的方式计算n的阶乘,最后返回结果。此处用double类型的变量result存储阶乘结果,避免用较小的int类型导致计算结果失真。
接下来,我们要计算组合数c n m 。根据公式c n m = m!(n-m)! / n! ,可以写一个计算组合数的函数。
函数语句如下:
double combination(int n, int m){
double result = 1.0;
result = fact(m) * fact(n - m) / fact(n);
return result;
}
首先,我们先定义一个double类型的result变量,用来存储组合数结果。然后,使用之前定义的阶乘函数fact(n),计算m!、(n-m)! 和n!,并进行相应运算,得到组合数结果result。
最后,我们在main函数中输入变量n和m,再调用combination函数计算组合数c n m 。
完整代码如下:
#include <iostream>
using namespace std;
double fact(int n){
double result = 1.0;
for(int i = n; i >= 1; i--){
result *= i;
}
return result;
}
double combination(int n, int m){
double result = 1.0;
result = fact(m) * fact(n - m) / fact(n);
return result;
}
int main()
{
int n, m;
cout << "请输入n和m的值:";
cin >> n >> m;
if(m > n){
cout << "m不能大于n,请重新输入:" << endl;
cin >> n >> m;
}
double result = combination(n, m);
cout << "从" << n << "个不同元素中取" << m << "个元素的组合数是:" << result << endl;
return 0;
}
阅读全文
相关推荐


















