用C++实现:“我要偶数”游戏通俗易懂,上手极快,得到了广大Ojer的喜爱。 在这个游戏里,你要对整数n(不含数字0)进行操作。操作的方法是将n中左起的m个数字前后倒置。例如:n=1234567,m=5,则操作后 n=5432167。不同的操作m的值可以不相同,m最大可以是n的位数。如上例中m最大可以是7,则初始n操作后为7654321。操作的目标是将n变成偶数。 你需要写一个程序,确定把整数n变成偶数需要进行的最少操作次数。如果无法通过操作得到偶数,则输出-1。 输入 第一行,一个整数 t(1≤t≤104),表示测试案例的数量。 接下来的t行,每一行都包含一个整数n(1≤n<109),保证n不包含数字0。 输出 t行,每行输出一个测试案例的答案。如果不可能得到偶数,则输出-1。 样例 输入 复制 3 3876 387 3 输出 复制 0 2 -1 提示 【数据范围与约定】 测试点1-10:1≤t≤104,1≤n<109; 测试点11:0<n<10; 测试点12:9<n<100。
时间: 2024-04-07 07:34:01 浏览: 121
以下是一个使用C++编写的解决方案:
```cpp
#include <iostream>
#include <string>
using namespace std;
int countOperations(int n) {
string numStr = to_string(n);
int numDigits = numStr.length();
int count = 0;
for (int m = 1; m <= numDigits; m++) {
string reversedStr = numStr.substr(0, m);
reverse(reversedStr.begin(), reversedStr.end());
int reversedNum = stoi(reversedStr);
if (reversedNum % 2 == 0) {
count = m;
break;
}
}
if (count == 0) {
return -1;
} else {
return count;
}
}
int main() {
int t;
cin >> t;
for (int i = 0; i < t; i++) {
int n;
cin >> n;
int result = countOperations(n);
cout << result << endl;
}
return 0;
}
```
这个程序首先读取整数t表示测试案例的数量。然后对于每个测试案例,读取整数n。在`countOperations`函数中,将n转换为字符串,并遍历从1到n的位数的范围。对于每个位数m,取出左起的m个数字并进行前后倒置,然后将倒置后的数字转换回整数。如果倒置后的数字是偶数,记录当前的位数m,并跳出循环。最后根据结果判断是否能得到偶数,返回对应的操作次数。
希望这个解决方案对你有帮助!
阅读全文