任务类似于快乐数字
Task similar to happy number
我正在解决一个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,"%dn",&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,"%dn",nr);
fclose(g);
}
return 0;
}
请帮帮我我的代码的问题是,当我点击运行和编译它不停止运行请帮助
不确定是否足够,但是…
您应该将sqr = 0
也放在外部while中,并且(正如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)
#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,"%dn",&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;
}
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 检查输入是否不是整数或数字
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 如何用数字处理log(0)
- 最高有效数字侧的第N位
- 如何获取一个数字的前3位
- 查找最接近的大于当前数字的数字的索引
- 找到两对数字,使它们的乘积的绝对差最小化
- 我想做一个彼此不同但重复出现的数字
- 将数字转换为字母(例如:123 转换为一二三)
- C++如何计算用户输入的数字中的偶数位数
- 如何在C++中确定文本文件中的元素是字符还是数字
- 打印数字图案
- C++问题:用户认为数字1-100,程序提出问题不超过6次即可得到答案。无法正确
- 如何检查一个c++字符串中有多少相同的字符/数字
- C++ 循环快乐数字 CS101.1X
- 打印出前888个快乐数字
- 如何制作一个程序,找到1到100万之间的快乐数字
- 任务类似于快乐数字