问题描述
- OJ 题目 重修之路大神帮帮忙
-
程序设计C 实验四 题目四 求组合数(0082)
Time limit(ms): 5000Memory limit(kb): 65535Submission: 9606Accepted: 3218Didn't trying
14级卓越班选拔B
编写一个函数,求从n 个不同的数中取r 个数的所有选择的个数。Description
输入n 和r 的值; 当用户输入0 0 时,程序结束。Input
根据公式: C(n,r) = C(n, r-1) * (n - r + 1) / r 输出运算结果 输入数据不满足题意时候,输出"error!"Output
1
2
3
4
5 3
10 20
50 3
0 0
Sample Input
1
2
3
4
5
6
7
10
error!
19600我的代码:
#include
int function(int n, int r)
{
if(n<r||r<=0||n<0)
return -1;
if(r == 1)
return n;
return (function(n,r - 1)*(n - r + 1))/r;
}
int main(){
int n, r;
while(scanf("%d %d",&n, &r)!=EOF)
{
if(n == 0 && r == 0)
return 0;
if(function(n,r) == -1)printf("error!n"); else printf("%dn",function(n,r)); } return 0;
}
结果:WrongAnswer
解决方案
#include <stdio.h>
int function(int n, int r)
{
if(n<r||r<0||n<0) //r可以取0,修改r<0
return -1;
if(r==0) return 1; //增加
if(r == 1) return n;
return (function(n,r - 1)*(n - r + 1))/r;
}
int main()
{
int n, r;
while(scanf("%d%d",&n, &r)!=EOF)
{
if(n == 0 && r == 0)
return 0;
if(function(n,r) == -1)
printf("error!n");
else
printf("%dn",function(n,r));
}
return 0;
}
解决方案二:
输入 0 0 结束程序, 为什么还要加!=EOF呢?
时间: 2024-10-30 22:32:08