2016-10-07 2 views
-2

Я решаю алгоритмическую проблему C++, и я не знаю, почему я не получаю правильный ответ. Проблема состоит в том, что задана строка из n чисел. Вам нужно взять каждый номер и добавить квадрат своих цифр, пока не получите сумму 4 или 1. Затем вам нужно напечатать, сколько раз вы добавили этот номер. Его пример: у вас есть строка из двух чисел: 89 и 68. Вы начинаете с 89: 64 + 81 = 145; (1) 1 + 16 + 25 = 42; (2) 16 + 4 = 20; 3) 4 + 0 = 4; (4) , и мы остановимся, потому что это 4. Нам нужно напечатать 4, потому что мы добавили 4 раза снова и снова, пока не получим 4 или 1. То же самое с 68. Мой код находится в C++ но он использует для файлов c.Задача похожа на счастливое число

#include<stdio.h> 
#include<math.h> 

FILE *f,*g; 
int n,i,a[500],sqr,nr; 
int main() 
{ 
    f = fopen("unupatru.in","r"); 
    fscanf(f,"%d\n",&n); 
    for(i=1;i<=n;i++)fscanf(f,"%d",&a[i]); 
    fclose(f); 
    for(i=1;i<=n;i++) 
    { 
    nr=0; 
    sqr=0; 
    while(sqr!=4 || sqr !=1) 
    { 
     while(a[i]) 
     { 
     sqr+=pow(a[i]%10,2); 
     a[i]/=10; 
     } 
     a[i]=sqr; 
     nr++; 
    } 
    g=fopen("unupatru.out", "w"); 
    fprintf(g,"%d\n",nr); 
    fclose(g); 
    } 
    return 0; 
} 

Пожалуйста, помогите мне Проблема с моим кодом, что, когда я нажимаю на бегу и скомпилировать его не перестают работать, пожалуйста, помогите

+0

Вы используете неправильные заголовки; вам нужно, например, ''. – MSalters

+0

Если вы используете C++, сначала удаляйте вызовы функций C. – wasthishelpful

+0

Спасибо за ошибки, но проблема не в этом, я решал подобные проблемы в течение недели, и это не проблема, проблема в том, что-то с логикой кода, пожалуйста, позвольте ему, скажите мне, как это исправить, код действительно похож на c –

ответ

1

Не уверен, что это достаточно, но ...

You должен поставить sqr = 0 также во внешнем время и (как указывает Игорь Tandetnik) модифицировать тест, используя вместо &&||

Или лучше: вы shuold использовать do/whilesqr=0 только внутри)

do 
{ 
    sqr=0; 
    while(a[i]) 
    { 
    sqr+=pow(a[i]%10,2); 
    a[i]/=10; 
    } 
    a[i]=sqr; 
    nr++; 
} 
while(sqr!=4 && sqr !=1) 
+0

спасибо leyt me try –

+0

Спасибо, что вы решили проблему, которая у меня была, но я не получаю ответ на запись –

+0

@MelinVen - Извините: я имею в виду: вы должны ** добавить ** 'sqrt = 0' внутри, поддерживая' sqr = 0' снаружи; возможно, 'do' /' while' лучше. – max66

0
#include<iostream> 
#include<cmath> 
#include<fstream> 
using namespace std; 
FILE *f,*g; 
int n,i,a[500],sqr,nr,b[500]; 
int main() 
{ 
    f = fopen("unupatru.in","r"); 
    fscanf(f,"%d\n",&n); 
    for(i=1;i<=n;i++)fscanf(f,"%d",&a[i]); 
    fclose(f); 
    for(i=1;i<=n;i++) 
    { 
     nr=0; 
     sqr=0; 
     while(sqr!=4 && sqr !=1) 
     { 
      sqr=0; 
      while(a[i]) 
      { 
       sqr+=pow(a[i]%10,2); 
       a[i]/=10; 
      } 
       a[i]=sqr; 
       nr++; 
       b[i]=nr; 
     } 
    } 

     g=fopen("unupatru.out", "w"); 
     for(i=1;i<=n;i++) 
     fprintf(g,"%d ",b[i]); 
     fclose(g); 
    return 0; 

}

Смежные вопросы