2.2.3 RUNAROUND NUMBERS 循環(huán)數(shù)

2018-06-19 14:06 更新

PS:最近工作比較忙,所以把以前在學(xué)校做acm的時候?qū)懙囊恍┙忸}報告發(fā)出來

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

題目大意:(如題)

輸入輸出:(如題)

解題思路:

從開始數(shù)后一個數(shù)往后枚舉,然后判斷其是不是循環(huán)數(shù),如果是就輸出退出。 

void transfer() //轉(zhuǎn)換函數(shù),將整數(shù)的每一位數(shù)提取出來
{ 
    int i; 
    n=0; 
    while(tmp>0) 
    { 
        i=tmp%10; 
        tmp/=10; 
        tmpstr[n]=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) //數(shù)里面有位數(shù)的數(shù)字重復(fù)
        { 
            flag=false; 
            return; 
        } 
    } 
    j=1; 
    for(i=0;i<10;i++) 
        mrk[i]=0; 
    for(i=1;i<=n;i++) //每位數(shù)判斷
    { 
        k=str[j]; 
        j=(str[j]+j)%n; //循環(huán)
        if(!j)j+=n; 
        if(mrk[j]!=0||str[j]==k) //不滿足循環(huán)數(shù)的條件或者已經(jīng)判斷過了,往后走k步出現(xiàn)的數(shù)和k相同
        { 
            flag=false; 
            return; 
        } 
        mrk[j]=1; //標(biāo)記判斷過了
    } 
    if(j==1) 
    { 
        flag=true; 
        return; 
    } 
} 




以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號