【问题标题】:SPOJ - Life, the Universe, and EverythingSPOJ - 生命、宇宙和一切
【发布时间】:2015-07-03 14:17:43
【问题描述】:

我不明白他们为什么不接受这个作为解决方案,他们说这是一个错误的答案:-

#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;
}

【问题讨论】:

  • 这可能是一个惊喜,但并不是每个人都知道“SPOJ ...”指的是什么(除了向 Douglas Noël Adams 致敬)。因此,请用所有相关信息完成您的问题。
  • 阅读答案和 cmets,您的程序会为 SPOJ 问题定义中给出的示例提供正确的输出(除了提示),因为您打印 88 然后停止,因为 88 是不少于42。但是您没有足够仔细地阅读问题陈述,并且您的提交将由 SPOJ 使用与示例不同的数字序列进行测试。 spoj.com/problems/TEST

标签: c


【解决方案1】:

两个错误:

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

像这样:

if(n!=42) 
   printf("%d\n",n); 
else 
   break;

【讨论】:

    【解决方案2】:

    首先,问题陈述表明您应该继续打印数字,直到 42 到达。

    1)如果第一个数字本身是 42 怎么办?你的代码无论如何都会打印它

    2)printf("Input:- \n"); 删除此行。提供此行只是为了显示输入内容。您不必打印此行。

    3)while(val&lt;42) val 可以是42 以外的任何值,不一定小于42

    一个好方法是尝试一些您自己的测试用例并将输出与预期输出进行比较。

    【讨论】:

      【解决方案3】:

      为什么不允许任何超过 42 的数字?使用while(1) 并在42 时中断。 这个问题已经在Life, the Universe, and Everything回答了

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2014-04-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-14
          • 2018-03-21
          • 2011-01-30
          相关资源
          最近更新 更多