SPOJ - 生命,宇宙以及一切

问题描述:

我不明白为什么他们不接受此作为解决方案,他们说了一个错误的答案: -SPOJ - 生命,宇宙以及一切

#include <stdio.h> 
int main(void) 
{ 
    int val=0; 
    printf("Input:- \n"); 

    do { 
     scanf("%d",&val); 
     printf("%d \n",val); 
    } 
    while(val < 42); 

    return 0; 
} 
+2

这可能是一个惊喜,但并不是每个人都知道“SPOJ ...”是指什么(除了向DouglasNoëlAdams致敬)。所以,请用**全部**相关信息填写您的问题。 – Olaf

+0

阅读答案和评论,你的程序给出了SPOJ问题定义中给出的例子的正确输出(除了提示),因为你打印'88'然后停止是因为'88'不小于'42'。但是您没有仔细阅读问题陈述,并且您的提交将由SPOJ以示例中的一个*不同*数字序列进行测试。 http://www.spoj.com/problems/TEST/ –

两个错误:

  1. 删除此行 - printf("Input:- \n");
  2. 问题你必须在42之前打印。如果42来了,你必须打破。

像这样:

一切,你应该保持对印刷数字,直到42到达问题陈述状态
if(n!=42) 
    printf("%d\n",n); 
else 
    break; 

第一。

1)如果第一个数字是42本身呢?你的代码将打印反正

2)printf("Input:- \n");删除提供此line.This只是为了展示一下输入is.You没有打印这个。

3)while(val<42)val可以比42不一定小于42

一个好方法是尝试一些自己的测试用例,并比较预期输出的输出的任何其他。

为什么42以上的号码不允许?使用while(1),当42中断。 这个问题已经回答在Life, the Universe, and Everything

+0

该链接不能很好地工作。 – unwind

+0

你说得对。现在是对的。 –

我认为你误解了问题,当输入是42或更大,你必须停止处理,但问题实际上是当输入是确切的42停止处理。 尽管事实上你知道你的代码有一个缺陷,当输入是42时,你将首先打印它,然后你的while while循环结束。