题目描述
编写一个函数,求从n 个不同的数中取r 个数的所有选择的个数。
输入
输入n 和r 的值; 当用户输入0 0 时,程序结束。
输出
根据公式: C(n,r) = C(n, r-1) * (n - r + 1) / r 输出运算结果 输入数据不满足题意时候,输出"error!"
样例输入
5 3
10 20
50 3
0 0
样例输出
10
error!
19600
代码示例
#include <stdio.h>
int main() {
int n, r;
int i, j;
while (scanf("%d%d", &n, &r) != EOF) {
int c = 1, d = 1;
if (n == 0 && r == 0) {
break;
} else if (n < r) {
printf("error!\n");
} else {
for (i = n; i > (n - r); i--) {
c = i * c;
}
for (j = r; j > 0; j--) {
d = j * d;
}
c = c / d;
printf("%d\n", c);
}
}
return 0;
}
- 注意连续输入,相关值需初始化(例如输出值c与d)
while (scanf("%d%d", &n, &r) != EOF)
- 注意当n与c为0时,程序结束——在外设循环,利用break跳出循环结束程序
- 计算过程优化:
- sum=sum*(n-i+1)/i;(与上文类似)
- 封装为函数
int c(int n,int r) { int m=0; if(n!=0 && r==0) return 1; else m=c(n, r-1) * (n - r + 1) / r; return m; }