USACO-Section2.2 Runaround Numbers
2017-09-01 16:40
267 查看
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 解题报告 【icedream61】
- USACO-Section2.2 Runaround Numbers [其他][模拟]
- USACO-Section 2.2 Runaround Numbers (枚举)
- USACO - Chapter2 Section 2.2 - Runaround Numbers
- USACO-Section2.2 Runaround Numbers【暴力枚举】
- 【USACO 2.2】Runaround Numbers
- Section 2.2 Runaround Numbers
- [2016/7/26][usaco 2.2]Runaround Numbers
- USACO 2.2 Runaround Numbers
- USACO 2.2 Runaround Numbers
- USACO 2.2 Runaround Numbers (runround)
- USACO - 2.2 Runaround Numbers(枚举)
- [USACO2.2]循环数 Runaround Numbers
- USACO 2.2 Runaround Numbers(乱搞)
- USACO 2.2 Runaround Numbers
- USACO 2.2.3 Runaround Numbers dfs
- USACO Runaround Numbers 模拟
- USACO:Runaround Numbers
- [USACO 2.2.3] Runaround Numbers
- usaco training-Runaround Numbers