您的位置:首页 > 其它

2.2.3 RUNAROUND NUMBERS 循环数

2014-10-28 09:18 399 查看
PS:最近工作比较忙,所以把以前在学校做acm的时候写的一些解题报告发出来

http://acm.sdibt.edu.cn/JudgeOnline/problem.php?id=2327

题目大意:(如题)

输入输出:(如题)

解题思路:从开始数后一个数往后枚举,然后判断其是不是循环数,如果是就输出退出。

void transfer() //转换函数,将整数的每一位数提取出来
{ 
    int i; 
    n=0; 
    while(tmp>0) 
    { 
        i=tmp%10; 
        tmp/=10; 
        tmpstr
=i; 
        n++; 
    } 
    for(i=0;i<=n;i++) 
        str[i]=tmpstr[n-i]; 
} 
   
void check() 
{ 
    int i,j,k; 
    for(i=0;i<10;i++) 
        mrk[i]=0; 
    for(i=1;i<=n;i++) 
        mrk[str[i]]++; 
    for(i=0;i<=9;i++) 
    { 
        if(mrk[i]>1) //数里面有位数的数字重复
        { 
            flag=false; 
            return; 
        } 
    } 
    j=1; 
    for(i=0;i<10;i++) 
        mrk[i]=0; 
    for(i=1;i<=n;i++) //每位数判断
    { 
        k=str[j]; 
        j=(str[j]+j)%n; //循环
        if(!j)j+=n; 
        if(mrk[j]!=0||str[j]==k) //不满足循环数的条件或者已经判断过了,往后走k步出现的数和k相同
        { 
            flag=false; 
            return; 
        } 
        mrk[j]=1; //标记判断过了
    } 
    if(j==1) 
    { 
        flag=true; 
        return; 
    } 
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: