作者 usx程序设计类课程组
单位 绍兴文理学院
输入两个正整数n、m,要求输出组合数C(n,m)。
例如,当n=5、m=3时,组合数C(5,3)=(5×4×3)/(3×2×1)=10。
组合数可用以下公式计算:
输入格式:
测试数据有多组,处理到文件尾。每组测试输入两个整数n,m(0 < m ≤ n ≤ 20)。
输出格式:
对于每组测试,输出组合数。
输入样例:
5 3
20 12
输出样例:
10
125970
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include <stdio.h>
int main(){
long long n,m;
long long sum1 = 1,sum2 = 1, sum3 = 1; // 定义三个变量分别存储 n!、m! 和 (n-m)! 的乘积
while(scanf("%lld%lld",&n,&m) != EOF){
// 循环累乘计算 n!
for(int i = 1; i <=n; i++)
{
sum1 *= i;
}
// 循环累乘计算 m!
for(int j = 1; j <= m; j++)
{
sum2 *= j;
}
// 循环累乘计算 (n-m)!
for(int k = 1; k <= n-m; k++)
{
sum3 *= k;
}
// 输出计算结果
printf("%d\n",sum1/(sum2*sum3));
// 清空三个变量,准备处理下一组输入数据
sum1 = 1;
sum2 = 1;
sum3 = 1;
}
return 0;
}