2016-06-26 3 views
-5

У меня есть ссылка на вопрос. Извините за все неприятности.Project Euler 145 in C

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

В приведенном выше вопрос, когда п 1000, то результат будет 120, который является правильным, но при п = 948 результат все равно 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; 
    } 

Пожалуйста, помогите мне в решении этой проблемы и как я полный новичок в C (я изучаю C в течение последних трех недель), мой код, безусловно, не самый лучший код, который вы найдете на сеть. Любая помощь будет оценена по достоинству.

+1

Хорошей отправной точкой будет научиться отступа кода последовательно, так что вы и другие могут на самом деле читать. –

+1

Я бы порекомендовал хотя бы проблему, но не только ссылку на нее в названии "Project Euler 145" – YakovL

ответ

0

Проблема с вашим контролем петли здесь

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

Так что, когда n 1000 вы включаете n. Но вопрос говорит ниже 1000.

При изменении, что условие в цикле, то ответ на 1000 еще 120, но ответ на 948 становится 119, который является правильным ответом.

Это должно быть

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

Благодарим за решение. Программа работает правильно. Но когда я загружаю код в Hacker Rank, несмотря на правильность вывода, это показывает, что это неправильно. Не могли бы вы помочь в решении проблемы? –

+0

Попробуйте изменить 'printf (" \ n% d ", j);' to 'printf ("% d \ n ", j);' без пробела и 'newline' переместится в его обычное положение. –

+0

Также измените 'scanf ("% d \ n ", &t);' to 'scanf ("% d ", &t);' –