一、重组偶数
题目解析
本题包含 q 组数据,每次输入一个正整数 x,要求将其重排为一个偶数并返回。如果 x 本身已是偶数则直接返回;若无法通过重排变成偶数,则输出 -1。
算法思路
将正整数 x 视为字符串处理较为方便。判断一个数是否为偶数只需检查其最低位(即字符串最后一位)。若最后一位是偶数,直接输出;若不是,则从前往后查找第一个偶数位并将其交换至末尾。若遍历完未找到偶数位,则输出 -1。
代码实现
#include <iostream>
using namespace std;
string func() {
string str;
cin >> str;
int n = str.size();
if ((str[n - 1] - '0') % 2 == 0) return str;
for (int i = 0; i < n - 1; i++) {
if ((str[i] - '0') % 2 == 0) {
swap(str[i], str[n - 1]);
return str;
}
}
return "-1";
}
int main() {
int q;
cin >> q;
while (q--) {
cout << func() << endl;
}
return 0;
}


