幸福的一步 - 所有我的输入提供正确的输出但仍然说错误的答案

时间:2013-06-29 21:08:56

标签: c

我正在尝试Timus Online Judge question #1493, "One Step from Happiness"

  

Vova在第13条路线的电车上买了一张机票,并计算了机票号码的前三位和后三位数的总和(数字有六位数)。事实证明,总和完全不同。 “我离幸福只有一步,”Vova想,“无论是上一张票还是下一张票都是幸运的。”他是对的吗?

     

输入

     

输入包含票证编号。该数字由六位数组成,其中一些数字可以为零。保证Vova计数正确,即前三位数的总和与最后三位数之和完全相同。

     

输出

     

如果Vova是正确的,则输出“是”,否则输出“否”。

     

样品

  input      output
--------------------
 715068      Yes
 445219      No
 012200      Yes
     

提示

     

所有电车票都有六位数。如果票证的前三位数等于其后三位数的总和,则该票证被认为是幸运的。

这是我的Visual C(2010)格式的代码。

#include <stdio.h>


int main() 
{
  int arr[5],arr1[5],arr2[5],i,a=0,b=0,n,x=0,y=0;
  printf("Enter number");
  scanf("%d",&n);
  x=n+1;
  y=n-1;
  while(n>0)
    {
      for(i=5;i>=0;i--)
    {
      arr[i]=n%10;
      n=n/10;
    }
    }

  a=( arr[0]+arr[1]+arr[2]);
  b=(arr[3]+arr[4]+arr[5]);

  if((a-b==1)||(a-b==-1))
    {
      while(x>0)
    {
      for(i=5;i>=0;i--)
        {
          arr1[i]=x%10;
          x=x/10;
        }
    }
      while(y>0)
    {
      for(i=5;i>=0;i--)
        {
          arr2[i]=y%10;
          y=y/10;
        }
    }
      if ((arr1[0]+arr1[1]+arr1[2]==arr1[3]+arr1[4]+arr1[5]) ||
          (arr2[0]+arr2[1]+arr2[2]==arr2[3]+arr2[4]+arr2[5]))
    { printf("Yes");}
      else
    { printf("No");}
    }
  else
    {
      printf("No");
    }
  return 0;
}

以上代码是我提交的代码,并在Timus Online Judge中收到错误的答案。它的提交格式是Visual C(2010)。我在计算机上使用Dev-C ++,因此我在计算机上运行的代码如下:

#include <stdio.h>
#include <conio.h> 

 main() 
{
  int arr[5],arr1[5],arr2[5],i,a=0,b=0,n,x=0,y=0;
  printf("Enter number");
  scanf("%d",&n);
  x=n+1;
  y=n-1;
  while(n>0)
    {
      for(i=5;i>=0;i--)
    {
      arr[i]=n%10;
      n=n/10;
    }
    }

  a=( arr[0]+arr[1]+arr[2]);
  b=(arr[3]+arr[4]+arr[5]);

  if((a-b==1)||(a-b==-1))
    {
      while(x>0)
    {
      for(i=5;i>=0;i--)
        {
          arr1[i]=x%10;
          x=x/10;
        }
    }
      while(y>0)
    {
      for(i=5;i>=0;i--)
        {
          arr2[i]=y%10;
          y=y/10;
        }
    }
      if ((arr1[0]+arr1[1]+arr1[2]==arr1[3]+arr1[4]+arr1[5]) ||
          (arr2[0]+arr2[1]+arr2[2]==arr2[3]+arr2[4]+arr2[5]))
    { printf("Yes");}
      else
    { printf("No");}
    }
  else
    {
      printf("No");
    }
  getch();
}

我没有收到任何编译错误。代码在我的Dev-C ++编译器上完美运行,也给了我正确的输出。问题是当我以Visual C格式提交此代码时,他们告诉我这是一个错误的答案。

1 个答案:

答案 0 :(得分:0)

演习说明:

Output "Yes" if Vova is right and "No" otherwise.

您的程序打印Enter number,练习不要求。尝试删除它。

另外,为了您自己和我们的理智,我强烈建议您更好地格式化您的程序。在一个美观,格式良好的程序中查找错误要容易得多。有关如何使代码更易读和干净的提示,您可以转到CodeReview.SE