题目链接https://www.acwing.com/problem/content/description/3362/分析:
奇数个数:odd
偶数个数:even
可分以下三种情况:
1.偶数=奇数 (or 偶数=奇数+1)
此时 res=odd*2(+1)=odd+even
2.偶数>奇数+1
此时 res=odd*2+1
我们可以两个偶数凑一组,直到情况1
3.奇数大于偶数
我们可以两个奇数凑成一个偶数,直到情况2
代码:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
const int N=1010;
int n;
int a[N];
int main()
{
int odd=0,even=0; //表示奇数和偶数的个数
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
if(a[i]%2!=0)
odd++;
else
even++;
}
while(odd>even) //情况3
{
odd-=2; //两个奇数凑偶数
even++; //偶数加1
}
if(even>odd+1) //情况2
{
//两个偶数凑一起,直到even=odd+1
//那么我们直接让even=odd+1,反正奇数的个数不会改变
even=odd+1;
}
cout<<odd+even<<endl;
return 0;
}