偶数 变奇数的最小代价为 x + 1,反过来一样
所以枚举是变成奇数还是偶数。得到最小值
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] a = new int[n];
for (int i = 0; i < n; i++) {
a[i] = scanner.nextInt();
}
// ans[0] 表示变为偶数的代价,ans[1] 表示变为奇数的代价
long[] ans = {0, 0};
for (int x : a) {
if (x % 2 == 0) {
ans[0] += x + 1; // 偶数变为奇数的代价
} else {
ans[1] += x + 1; // 奇数变为偶数的代价
}
}
System.out.println(Math.min(ans[0], ans[1]));
}
}
n = int(input())
a = list(map(int, input().split()))
ans = [0, 0]
for x in a:
if x % 2 == 0:
ans[0] += x + 1
else:
ans[1] += x + 1
print(min(ans))
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
// ans[0] 表示变为偶数的代价,ans[1] 表示变为奇数的代价
long long ans[2] = {0, 0};
for (int x : a) {
if (x % 2 == 0) {
ans[0] += x + 1; // 偶数变为奇数的代价
} else {
ans[1] += x + 1; // 奇数变为偶数的代价
}
}
cout << min(ans[0], ans[1]) << endl;
return 0;
}
OJ会员可以通过点击题目上方《已通过》查看其他通过代码来学习。
小美有一个长度为n的数组,他每次操作会执行如下:
选定一个ai,把这个数加上一个任意的x(x>0),花费的代价为ai+x。
现在小美想要把整个数组变成全部奇数或者全部偶数的最小代价是多少?
第一行一个整数 n(1≤n≤105)表示数组长度。
第二行n个整数,第i个数为ai(1≤ai≤109)表示数组元素。
一个整数,表示小美想要把整个数组变成全部奇数或者全部偶数的最小代价。
输入
3
1 2 3
输出
3
说明
选择第2个数+1,数组变成133。满足条件,代价是2+1=3