-2

Timus Online Judge の質問 #1493、「幸福からの一歩」を実行しようとしています。

Vova は 13 番目のルートのトラムでチケットを購入し、チケットの番号 (数字は 6 桁) の最初の 3 桁と最後の 3 桁の合計を数えました。合計が正確に 1 異なることが判明しました。「私は幸福から一歩離れています」と Vova は考えました。彼は正しいですか?

入力

入力にはチケットの番号が含まれます。数値は 6 桁で構成され、その一部はゼロの場合があります。Vova が正しくカウントしたこと、つまり、最初の 3 桁の合計が最後の 3 桁の合計と正確に 1 異なることが保証されます。

出力

Vova が正しい場合は「はい」、そうでない場合は「いいえ」を出力します。

サンプル

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

ヒント

すべてのトラムのチケットは正確に 6 桁です。最初の 3 桁の合計が最後の 3 桁の合計と等しい場合、チケットは幸運であると見なされます。

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 形式で提出したときに、間違った答えだと言われたときです。

4

1 に答える 1

0

演習では次のように述べています。

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

あなたのプログラムは を出力しますEnter numberが、これは演習では要求しません。それを取り除いてみてください。

また、あなた自身と私たちの正気のために、プログラムをより適切にフォーマットすることを強くお勧めします。美しく整形されたプログラムでは、エラーを見つけるのがはるかに簡単になります。コードをより読みやすくきれいにする方法のヒントについては、CodeReview.SEにアクセスしてください。

于 2013-06-30T05:22:09.500 に答える