台州学院第四届大学生程序设计竞赛解题报告

第四届校赛 C题 解题报告-by zhaoshuai

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。


为解题报告打分
暂时不评分

★★
★★★
★★★★
★★★★★
发表您的评论(若贴AC代码或发表禁止言论等违禁行为将被删除并扣除积分)

|返回 |   | 转到页头|
Copyright @ 2008-2024(浙ICP备2022001332号), TZOJ. All Rights Reserved.