一、重组偶数
题目描述
给定一组数据,每次输入一个正整数 x。要求将其重排成一个偶数并返回;如果 x 本身是偶数则直接返回。若无法通过重排得到偶数,则输出 -1。
解题思路
对于正整数 x,我们可以将其视为字符串处理,这样能更方便地操作每一位数字。判断一个数是否为偶数,只需看其最低位(末位)是否为偶数。
具体策略如下:
- 检查字符串最后一位,如果是偶数,直接返回原串。
- 如果不是,从前往后遍历寻找第一个偶数位,将其交换到末尾。
- 若遍历结束仍未找到偶数位,说明该数全由奇数组成,无法重排为偶数,返回
-1。
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string solve() {
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() {
q;
cin >> q;
(q--) {
cout << () << endl;
}
;
}


