C题(Circle Length)
题意:
给你一个数,后面的一个数是前面一个数各个位上的平方和,叫你求出现相同数时的周期是多少。
思路:
先开两个数组visit[10000005]和a[100],visit用来判断这个数是否出现过,而a数组则存放没出现相同数时的数组。
再用一个while循环来把已经出现过的数相应位置赋为1,没出现过的数存入数组,记录总个数。具体代码如下:
k=0;
num=0;
while(visit[n]!=1)
{
a[k++]=n;
//printf("%d ",next(n));
visit[n]=1;
n=next(n);
num++;
}
此时的n就是出现重复的那个数。
再在a数组中从头开始找这个重复的数,找到break,没找到的把个数加1。具体代码如下:
int num1=0;
for(i=0;i<k-1;i++)
{
if(n!=a[i])
num1++;
else if(n==a[i])
break;
}
最后输出num-num1就为周期。
注意:
这题不是求当出现与第一个数相同时的周期,而是当出现与数组a中的任意一个相同时求相同数之间的周期是多少。如n=10,a是10,1,1,这时的周期就为1。