我正在解决c ++算法问题,我不知道为什么我得不到正确答案。问题在于:给出一行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;
}
请帮帮我 我的代码的问题是,当我点击运行并编译它并没有停止运行请帮助
答案 0 :(得分:1)
不确定是否足够......
您应该将sqr = 0
放在外部,而(正如Igor Tandetnik指出的那样)使用&&
而不是||
修改测试
或更好:您应该使用do
/ while
(仅在sqr=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 :(得分: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;
}