CCF NOI1063 计算组合数
问题链接:CCF NOI1063 计算组合数。
时间限制:
1000 ms 空间限制: 262144 KB
题目描述
给出两个非负整数n和m,编写程序计算组合数C(n,m)的值。
输入
一行两个空格隔开的非负整数n,m。
输出
输出一个数表示C(n,m)。
样例输入
5 2
样例输出
10
数据范围限制
0<n<=20,0<=m<=n。
问题分析
这是一个简单的数学计算问题,需要知道组合函数的计算公式。
输入的数不保证m和n的大小,程序中需要注意,编写相应的逻辑应对。
程序说明
输入的n和m不大,使用类型unsigned long long即可。
使用类型定义后,提交时需要选C++,否则程序错误。那个C语言编译器似乎不支持类型定义!郁闷啊!
要点详解
- 尽量用函数封装功能函数。
- 使用类型定义可以使得代码更加简洁。
参考链接:(略)。
100分通过的C语言程序:
#include <stdio.h> typedef unsigned long long ULL; ULL c(int n, int m) { ULL ans = 1; if(m <= n-m) m = n - m; for(int i=m+1; i<=n; i++) ans *= i; for(int i=1; i<=n-m; i++) ans /= i; return ans; } int main(void) { int n, m; scanf("%d%d", &n, &m); printf("%lld\n", c(n, m)); return 0; }