传送门
思路如下:奇偶性不同的两个数可以交换位置,求使得这个数最小的情况。由于只能交换相邻奇偶的数,所以奇偶数字的相对位置一定不变,把他们分别存在两个数组里,按大小输出即可
代码如下:
int T = 1; cin >> T;
while(T --){
string s; cin >> s;
int c1 = 0, c2 = 0;
a[1] = 10, b[1] = 10;
rep(i, 0, s.size() - 1){
int k = s[i] - '0';
if(k%2){
a[++ c1] = k; //ji
} else {
b[ ++ c2] = k; // ou
}
}
int t1 = 1, t2 = 1;
rep(i, 1, s.size()){
if(a[t1] < b[t2]){
cout << a[t1];
t1 ++;
} else {
cout << b[t2];
t2 ++;
}
if(t1 == c1 + 1 || t2 == c2 + 1){
break;
}
}
while(t1 <= c1) cout << a[t1], t1 ++;
while(t2 <= c2) cout << b[t2], t2 ++;
cout << endl;
}
return 0;