题意:
通过交换数组中的任意位置的元素,能够使得数组的下标的奇偶校验与元素相同的最小操作次数是?
思路:
判断错误的奇数与偶数个数是否相同,相同直接输出,否则输出‘-1’
#include <iostream>
using namespace std;
int main() {
int t;
cin >> t;
while(t--) {
int n, odd = 0, even = 0, d = 0, ans = 0;
cin >> n;
int a[50];
for(int i = 0; i < n; i++) {
cin >> a[i];
if(a[i] % 2) odd++; //奇数个数
else even++; //偶数个数
}
if(n % 2) { //判断情况
if(even - odd == 1) {
for(int i = 0; i < n; i++) { //循环判断有几个奇数下标不满足
if(i % 2 && i % 2 != a[i] % 2) {
ans++;
}
}
cout << ans << endl;
}else { //如果不满足一定不能得到
cout << "-1" << endl;
}
}else {
if(even != odd) {
cout << "-1" << endl;
}else { //循环判断你有几个奇数不满足
for(int i = 0; i < n; i++) {
if(i % 2 && i % 2 != a[i] % 2) {
ans++;
}
}
cout << ans << endl;
}
}
}
return 0;
}