这个题要求求出一个10^n+n-1的序列,其中包含了所有的1-10^n的数,
开始想的用递归,发现会悲剧, 后来看书上才知道用非递归写~,C++ AC,G++超时,不知道为何
代码:
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
using namespace std;
const int maxn=1e6+10;
const int maxm=1e5+10;
int n,mod,cnt[maxm],stack[maxn],top;
char ans[maxn];
void Search(int v)
{
while(cnt[v]<10)
{
int w=v*10+cnt[v];
cnt[v]++;
stack[top++]=w;
v=w%mod;
}
}
int main()
{
while(scanf("%d",&n)&&n)
{
top=0;
mod=pow(10.0,n-1);
int v=0,len=0;
for(int i=0;i<=mod;i++)
cnt[i]=0;
Search(v);
while(top)
{
int v=stack[--top];
ans[len++]=v%10+'0';
v/=10;
Search(v);
}
for(int i=1;i<n;i++)
printf("0");
while(len)
printf("%c",ans[--len]);
printf("\n");
}
return 0;
}