对于每个测试用例,输入一个整数n(0 <= n <= 10)

时间:2016-07-24 15:52:11

标签: c functional-programming

我正在网上法官解决问题而且我遇到了问题。我认为我的代码是正确的,但不幸的是法官说错了答案。我哪里弄错了?

Habib在过去几天里学到了很多关于编程的知识!今天,他面临着一个新的挑战,用测试用例处理输入!为此,他必须解决一组输入,并且对于每个输入,h必须生成输出。除了计算因子之外,还有什么比练习这个更好?!通过将N的所有整数相乘来计算整数1 to N的阶乘。例如,4!(4阶乘)计算为 - 1x2x3x4=24。在这个问题中,Habib需要为定义数量的测试用例解决一组输入。例如,如果testcase = 3,那么他必须接受3组输入并生成3组所需输出,一个输出用于一个输入。帮助他解决问题。

输入

输入以整数Test(0&lt; Test&lt; 100)开始,表示要求解的输入或测试用例的数量。对于每个测试用例,输入整数n(0 <= n <= 10)。

输出

对于每个测试用例,在一行中生成输出格式为:Case x: y,其中x是测试用例编号,y是计算n!的答案。

#include <stdio.h>
int main()
{
    int i,Test,n=0,x,j,y,s=1;
    scanf("%d",&Test);
    for(i=1;i<=Test;i++)
    {
        scanf("%d",&n);
        for(j=1;j<=n;j++)
        {
            s=s*j;
        }
        printf("Case %d: %d\n",i,s);
    }
    return 0;
}

3 个答案:

答案 0 :(得分:2)

您忘记为每个测试用例重置s

尝试在s=1;之后添加scanf("%d",&n);

答案 1 :(得分:0)

  

输入输入以整数Test(0&lt; Test&lt; 100)开始,表示要求解的输入或测试用例的数量。对于每个测试用例,输入整数n(0 <= n <= 10)。

您的代码并未反映这一点。你一定要检查输入是否有效,方法可以是:

if(Test < 100 && Test > 0){
  //do something
}else{
    printf("Invalid input!");
    }

此外,您应该考虑使用大写变量名称或仅使用小写,例如:int test,nint Test, N。当你必须在几天之后编辑它们时,混合两者使得更大的项目成为猜谜游戏。

现在到你的任务: 基本上你的任务是找到n!并做X次。

正如@MikeCat所说,你永远不会重置你的s,这是你的阶乘的起点。

#include <stdio.h>
int main(){
int i,test,n=0,x,j,y,s=1;
scanf("%d",&Test);
if(!(test <100 && test > 0)){
    printf("Invalid input!");
}
for(i=1;i<=test;i++)
{
    scanf("%d",&n);
    s = 1;
    for(j=1;j<=n;j++)
    {
        s=s*j;
    }
    printf("Case %d: %d\n",i,s);
}
return 0;
}

这应该可以解决问题。

答案 2 :(得分:0)

将您的代码更改为

#include <stdio.h>
int main()
 {
    int i,Test,n=0,x,j,y;
    scanf("%d",&Test);
    for(i=1;i<=Test;i++)
    {
        int s=1;//observe this 
        scanf("%d",&n);
        for(j=1;j<=n;j++)
        {
             s=s*j;
        }
        printf("Case %d: %d\n",i,s);
    }
   return 0;
}