交换最后一位与其他的某一位使得此数为偶数且最大,首先要是偶数必定其某一位是偶数,其次如果要达到最大,那么如果这最后一位比高位中某个偶数位大的话就直接交换就可以得到最大的了,否则的话,如果找不到这样小的偶数位,那就和最低的那一个偶数位交换。
#include <iostream>
#include <string>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <stack>
#include <queue>
#define MAX 100005
#define mod 998244353ll
#define INF 0x3f3f3f3f
#define ll long long
using namespace std;
int main() {
freopen("a.txt", "r", stdin);
freopen("b.txt", "w", stdout);
string s;
vector<int> sv;
cin >> s;
int len = s.length();
bool f = false;
for (int i = 0; i < len - 1; ++i) {
int t = s[i] - '0';
if (t % 2 == 0) {
f = true;
sv.push_back(i);
}
}
if (f) {
int si = sv.size();
f = false;
for (int i = 0; i < sv.size(); ++i) {
if (s[sv[i]] < s[len - 1]) {
swap(s[sv[i]], s[len - 1]);
f = true;
break;
}
}
if (!f) swap(s[sv[si - 1]], s[len - 1]);
cout << s << endl;
}
else {
puts("-1");
}
return 0;
}