C++ 中如何用最少的移除次数使数组和为偶数
c++server side programmingprogramming
问题描述
给定一个包含 N 个整数的数组 arr[]。我们需要编写一个程序,找出需要从数组中移除的最少元素个数,使得剩余元素的和为偶数。
示例
如果输入数组为 {10, 20, 30, 5},则我们需要移除一个元素,即 5,以使数组和为偶数
算法
1. 任意数量的偶数之和始终为偶数 2. 奇数个奇数之和始终为奇数 3. 偶数个奇数之和始终为偶数 4. 计算数组中奇数元素的数量。如果数组中奇数元素的数量是偶数,那么我们不需要从数组中删除任何元素,但如果数组中奇数元素的数量是奇数,那么从数组中删除任意一个奇数元素
示例
#include <bits/stdc++.h> using namespace std; int getMinRemovals(int *arr, int n) { int cnt = 0; for (int i = 0; i < n; ++i) { if (arr[i] % 2 == 1) { ++cnt; } } return (cnt % 2 == 0) ? 0 : 1; } int main() { int arr[] = {10, 20, 30, 5}; int n = sizeof(arr) / sizeof(arr[0]); cout << "Minimum required removals = " << getMinRemovals(arr, n) << endl; return 0; }
编译并执行上述程序,将生成以下输出
输出
Minimum required removals = 1