题目
给定一个序列 a1,a2,…,an,找到需要从序列中移除的最小元素数,以便在移除后,每 2 个连续元素的和都是偶数。
输入
每个测试包含多个测试案例。第一行包含一个整数 t(1≤t≤100) — 测试案例的数量。接下来是测试案例的描述。
每个测试案例的第一行包含一个整数 n (3≤n≤105)。
每个测试案例的第二行包含 n个整数 a1,a2,…,an (1≤ai≤10^9) — 序列的元素。
保证所有测试案例中 n 的总和不超过 10^5。
输出
对于每个测试案例,输出一个整数 — 移除序列中的最小元素数,以满足每 2个连续元素的和都是偶数。
示例
输入
2
5
2 4 3 6 8
6
3 5 9 7 1 3
输出
1
0
备注
在第一个测试案例中,移除 33 后,序列变为 [2,4,6,8][2,4,6,8]。连续的元素对是 {[2,4],[4,6],[6,8]}{[2,4],[4,6],[6,8]}。现在每个连续的对都有偶数和。因此,我们只需要移除 1 个元素以满足所需条件。
在第二个测试案例中,每个连续对的和已经是偶数,所以不需要移除任何元素。
C程序源代码
#include<stdio.h>
int main(){
int group,count,m=0,n=0;
scanf("%d",&group);
int b[group];
for(int i=0;i<group;i++){
int m=0,n=0;
scanf("%d",&count);
int a[count];
for(int i=0;i<count;i++){
scanf("%d",&a[i]);
}
for(int i=0;i<count;i++){
if(a[i]%2==0){
m++;
}else{
n++;
}
}
if(m>n){
b[i]=n;
}else{
b[i]=m;
}
}
for(int i=0;i<group;i++){
printf("%d\n",b[i]);
}
return 0;
}
提示
计算奇数和偶数的个数。