传送门
大力照一发规律。
以4结尾删4
以其他数结尾删到末位于当前数相同,加上4就可以了。
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
char s[105],a[4][105],ch;
int l,x,fl,u,v,l1,l2;
void get(int p,int l){
if (!l) return;
if (s[l]=='4'){
x++;
for (int i=0;i<l;i++) a[x][i]=s[i];
a[x][l]=p+'0';
return;
}
if (s[l]-'0'==p){
x++;
for (int i=0;i<l;i++) a[x][i]=s[i];
a[x][l]='4';
return;
}
get(p,l-1);
}
int main(){
scanf("%s",&s);
x=0;
l=strlen(s)-1;
get(1,l);
get(2,l);
get(3,l);
for (int i=1;i<=x;i++)
for (int j=i+1;j<=x;j++){
l1=strlen(a[i]);
l2=strlen(a[j]);
u=v=0;
fl=0;
for (;u<l1&&v<l2;u++,v++){
if (a[i][u]>a[j][v]){fl=1; break;}
if (a[i][u]<a[j][v]){fl=0; break;}
}
if (fl){
u=0;
for(;u<l1||u<l2;u++){
ch=a[i][u]; a[i][u]=a[j][u]; a[j][u]=ch;
}
}
}
for (int i=1;i<=x;i++) printf("%s\n",a[i]);
return 0;
}