Задача похожа на счастливый номер

Я решаю алгоритмическую проблему с ++ и не знаю, почему не получаю правильный ответ. Задача состоит в том, что: здесь дан ряд из n чисел. Вам нужно взять каждое число и добавить квадрат его цифр, пока вы не получите сумму 4 или 1. Затем вам нужно напечатать, сколько раз вы добавили это число. Его пример: у вас есть ряд из 2 чисел: 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;
}

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

-2

Решение

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

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

Или лучше: вы должны использовать 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)
1

Другие решения

#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;

}

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector