USACO-Section2.2 Runaround Numbers
生活随笔
收集整理的這篇文章主要介紹了
USACO-Section2.2 Runaround Numbers
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2017-9-1
題目描述
給定一個數M,找到并輸出剛好比M大的下個循環數解答
直接按照題目所給步驟求解即可 tips:數不重復,不存在零最后回到零的位置且必須走n次走過所有n位數字代碼
/* ID: 18795871 PROG: runround LANG: C++ */ #include<iostream> #include<fstream> #include<cstring> using namespace std; const int N = 20;ifstream fin("runround.in"); ofstream fout("runround.out");int x[N+1]; bool d[N+1],f[N+1]; int l;bool cal(long n){ //判斷是否存在零并把數拆開來 int i=0,j;int y[N+1];while (n){y[i]=n%10;if (d[y[i]]) return false;d[y[i]]=true;n/=10;if (y[i]==0) return false;i++;} l=i;for (j=0;j<l;j++) x[j]=y[l-j-1];return true; }bool fun(){for (int i=0;i<l;i++){if (!f[i]) return false;}return true; }bool res(long n){int i,j,k=0;for (i=0;i<l;i++){f[k]=true;int p=x[k];for (j=0;j<p;j++){k=(k+1)%l;}} if (k==0&&fun()) return true;return false; }int main() {long i,n; fin>>n;for (i=n+1;;i++){memset(x,0,sizeof(x));memset(d,false,sizeof(d));memset(f,false,sizeof(f));if (!cal(i)) continue;if (res(i)) break;}fout<<i<<endl;return 0; }總結
以上是生活随笔為你收集整理的USACO-Section2.2 Runaround Numbers的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 记录一下Memcached的用法:
- 下一篇: Ubuntu开机启动Python脚本