1、2、3三个数字组成的序列,要求把所有的2放在前面,所有的3放在后面,输出结果。
Input
每组数据1、2、3组成的一行字符串,长度不超过10 ^ 5。
Output
把原串的2放在前面,3放在后面,输出。
Sample Input
12321
223311
Sample Output
22113
221133
Hint
[分析]
常见的思路就是遍历记录每个数字的个数,然后按顺序输出。这里就不再赘述。
然后分享一个杀马特操作。
用sort(其实也不是很厉害,就是开拓一下思维,顺便更好地学习一下sort)。
自定义一个cmp
根据cmp的特性:如果cmp返回true,就说明前一个变量的优先级更高
不过这样写其实时间效率不是很高,这里只是为了开拓思维。
[代码]
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
bool cmp(char a, char b)
{
if (a == '2'&&b == '1')return 1;
if (a == '2'&&b == '3')return 1;
if (a == '1'&&b == '3')return 1;
return 0;
}
int main()
{
int arr[4];
char a[100005];
while (scanf("%s", a) != EOF)
{
int len = strlen(a);
sort(a, a + len, cmp);
printf("%s\n", a);
}
}