C++ 算法刷题实战
一、重组偶数
题目描述
给定一组数据,每次输入一个正整数 x。要求将其重排为一个偶数并返回。如果 x 本身已是偶数则直接返回;若无法通过重排得到偶数,则输出 -1。
思路解析
判断一个整数是否为偶数,只需看其最低位(个位)是否为偶数。因此,我们可以将数字视为字符串处理:
- 检查字符串最后一位字符对应的数字是否为偶数。如果是,直接返回原字符串。
- 如果不是,从前往后遍历寻找第一个偶数位。
- 找到后将该位与最后一位交换,返回新字符串。
- 若遍历结束仍未找到偶数位,说明无法构成偶数,返回
-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 ;
}


