【题目描述】
给定一个n,表示一个由0~9数字构成的n位密码。
解锁时一直读入,只要当最后读入的n个数字与密码吻合,就解锁。
现需要输出一个长度为10n+n-1的数字序列,这个数字序列包括了n位密码的所有可能。
【输入描述】
输入若干行,每行一个整数n(0 <= n <= 6)。
【输出描述】
与输入相对应,每行输出一串数字序列。
【样例输入】
1
2
0
【样例输出】
0123456789
00102030405060708091121314151617181922324252627282933435363738394454647484955657585966768697787988990
听说是个欧拉回路裸题(不明觉厉):
源代码: #include<cstdio> #include<cstring> const int Pow[7]={1,10,100,1000,10000,100000,1000000}; int n,Top,Num[1000001],Q[1000001]; bool Vis[1000001]; void DFS() { for (int a=1;a<n;a++) putchar('0'); memset(Vis,0,sizeof Vis); memset(Num,0,sizeof Num); Top=1; Vis[0]=true; Q[Top]=0; while (Top!=Pow[n]) { int T1=Q[Top]; if (Num[T1]==10) { Vis[T1]=Num[T1]=0; Top--; continue; } Num[T1]++; int T2=(T1*10+Num[T1]-1)%Pow[n]; if (Vis[T2]) continue; Vis[T2]=true; Q[++Top]=T2; } for (int a=1;a<=Top;a++) printf("%d",Q[a]%10); } int main() { while(scanf("%d",&n)) { if (!n) break; if (n==1) printf("0123456789"); else DFS(); putchar(' '); } return 0; }