2016-06-26 3 views
-5

私は質問へのリンクを与えています。ご面倒をおかけしてすみません。上記の質問、1000はnがでプロジェクトオイラー145 in C

https://www.hackerrank.com/contests/projecteuler/challenges/euler145

、結果が正確であるが、場合N = 948の結果が間違っている依然として120で120です。

# include <stdio.h> 
    # include <math.h> 
    int check(int n) 
    { 
     if(n%10==0) 
     { 
      return 0; 
     } 
     else 
     { 
      return 1; 
     } 
    } 
    int rev(int n) 
    { 
     int s=0; 
     while(n!=0) 
     { 
      s=s*10+n%10; 
      n=n/10; 
     } 
    return s; 
    } 

    int count(int a) 
    { 
     int c=0; 
     while(a!=0) 
     { 
       c++; 
       a=a/10; 
     } 
     return c; 
    } 

    int odd(int k) 
    { 
      if(k%2!=0) 
      { 
      return 1; 
      } 
     else 
      { 
      return 0; 
      } 
    } 

    int digit(int n,int p) 
    { 
     int k=0,c=0; 
     while(n!=0) 
     { 
       k=n%10; 
       if(odd(k)==1) 
       { 
       c++; 
       } 
       n=n/10; 
     } 
     if(c==p) 
     { 
       return 1; 
     } 
     else 
     { 
       return 0; 
     } 
    } 

    int result(int n) 
     { 
       int s=0,k=0,i=1,m=0,j=0; 
       for(i=0;i<n;i++) 
       { 
         if(check(i)==1) 
         { 
          s=i+rev(i); 
          k=count(s); 
          m=digit(s,k); 
         if(m==1) 
         { 

           j++; 
          } 
         } 
       } 
      return j; 
      } 



     int main() 
     { 
      int n=0,t=0,p=0,k=0,c=1,a[1000],i; 
      scanf("%d",&t); 
      for(i=0;i<t;i++) 
      { 
       scanf("%d",&n); 
       a[i]=result(n); 
      } 
      for(i=0;i<t;i++) 
      { 
       printf("\n %d",a[i]); 
      } 
     return 0; 
    } 

問題を解決するために私を助けて、私は(私は最後の3週間Cを学習されている)C に完全な新人だとして、私のコードは間違いなくあなたが上で見つける最高のコードではありませんしてくださいネット。 助けていただければ幸いです。

+1

でなければなりません。 –

+1

私は少なくともここに問題を置くことをお勧めします。タイトルは "Project Euler 145" – YakovL

答えて

0

問題はnが1000であるとき、あなたはnを含め、ここで

for(i=1;i<=n;i++) 

あなたのループ制御です。しかし、質問は以下1000と述べています。

あなたがループ内でその状態を変更すると、1000ための答えはまだ120ですが、948のための答えが正解である、119になります。

それは良い出発点は、あなたと他の人が実際にそれを読むことができるように一貫して、あなたのコードをインデントすることを学ぶことであろう

for(i=1; i<n; i++) 
+0

です。解決していただきありがとうございます。プログラムが正しく実行されます。しかし、私がHacker Rankでコードをアップロードすると、出力が正しいにもかかわらず、間違っていることが示されます。問題を解決するのに助けてください。 –

+0

'printf(" \ n%d "、j);'を 'printf("%d \ n "、j);'にスペースを入れずに変更してみましょう。その通常の位置。 –

+0

'scanf("%d \ n "、&t);' to 'scanf("%d "、&t);' –