#include<stdio.h>
#include<string.h>
int n,ans[1000],vis[1000],len,flag=0;
char s[1000];
void dfs(int cur)
{
//printf("%d\n",cur);
if(cur==len)
{
for(int i=0; i<len; i++)
if(ans[i]!=0)
printf("%d ",ans[i]);
flag=1;
return ;
}
for(int i=0; i<2; i++)
{
if(i==0)
{
int num=s[cur]-'0';
if(vis[num])
{
continue ;
}
vis[num]=1;
ans[cur]=num;
dfs(cur+1);
vis[num]=0;
}
else
{
int num=(s[cur]-'0')*10+(s[cur+1]-'0');
if(vis[num]||num>n)
{
return ;
}
vis[num]=1;
ans[cur]=num;
ans[cur+1]=0;
dfs(cur+2);
vis[num]=0;
}
}
}
void print()
{
if(ans[0]!=0)
printf("%d",ans[0]);
for(int i=1; i<len; i++)
{
if(ans[i]!=0)
printf(" %d",ans[i]);
}
}
int main()
{
scanf("%s",s);
memset(vis,0,sizeof(vis));
len=strlen(s);
if(len>9)
{
n=(len-9)/2+9;
dfs(0);
//print();
}
else
for(int i=0; i<len; i++)
{
if(i==0)
printf("%c",s[0]);
else
printf(" %c",s[i]);
}
printf("\n");
}
计算之道(置换的玩笑)
最新推荐文章于 2021-04-17 00:51:03 发布