对任意一个自然数N0,先将其各位数字相加求和,再将其和乘以3后加上1,变成一个新自然数N1;然后对N1重复这种操作,可以产生新自然数N2;……多次重复这种操作,运算结果最终会得到一个固定不变的数Nk,就像掉入一个数字“陷阱”。本题要求对输入的自然数,给出其掉入“陷阱”的过程。
利用数组编写
存在数组出现n0[-1]的情况
希望有大佬修改
#include<stdio.h>
int main()
{
int n,x,j;
int n0[1000];
for(j=1;j<=1000;j++)
n0[j-1]=j;
scanf("%d",&n);
for(x=1;;x++)
{
n0[x-1]=fun_gsSum(n);
printf("%d:%d\n",x,n0[x-1]);
if(n0[x-2]==n0[x-1])
break;
n=n0[x-1];
}
return 0;
}
int fun_gsSum(int n)
{
int n0=0;
for(;n>0;)
{
n0+=n%10;
n/=10;
}
n0=n0*3+1;
return n0;
}
记录上一个数来与新的数比较
#include <stdio.h>
int fun_gsSum(int n);
int main()
{
int n,i,x;
scanf("%d",&n);
for(i=1;;i++)
{
x=fun_gsSum(n);
printf("%d:%d\n",i,x);
if(n==x) //前一个数与现在的比较
break;
n=x;
}
return 0;
}
//计算各位数字相加求和,再将其和乘以3后加上1,变成一个新自然数n0
int fun_gsSum(int n)
{
int n0=0;
for(;n>0;)
{
n0+=n%10;
n/=10;
}
n0=n0*3+1;`