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; } }
更多建議: