任务类似于快乐数字

Task similar to happy number

本文关键字:数字 快乐 类似于 任务      更新时间:2023-10-16

我正在解决一个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;

}