华为OD机试真题目录:真题目录

本文章提供java、python、c++、jsNode四种代码

题目描述

A、B两个人把苹果分为两堆,A希望按照他的计算规则等分苹果,他的计算规则是按照二进制加法计算,并目不计算进位12+5=9 (1100 + 0101 = 9),B的计算规则是十进制加法,包括正常进位,B希望在满足A的情况下获取苹果重量最多。输入苹果的数量和每个苹果重量,输出满足A的情况下B获取的苹果总重量。

如果无法满足A的要求,输出-1。

数据范围
1 <= 总苹果数量 <= 20000
1 <= 每个苹果重量 <= 10000

输入描述

输出描述

示例1 输入输出示例仅供调试,后台判题数据一般不包含示例

示例2 输入输出示例仅供调试,后台判题数据一般不包含示例输入

思路:

首先将所有数转化为二进制,每位的1和0的数量都要是偶数个

也就是所有数的异或最后要为0,才能按A的方法分给两个人

不为0的数输出就是-1

为0的话,数组最小的值就是分给A的,其他都是分给B的

java代码:

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = Integer.parseInt(scanner.nextLine().trim());
        String[] dataStr = scanner.nextLine().split(" ");
        int[] data = new int[n];
        int res = 0;
        int sum = 0;
        for (int i = 0; i < n; i++) {
            data[i] = Integer.parseInt(dataStr[i]);
            res ^= data[i];
            sum += data[i];
        }
        Arrays.sort(data);
        System.out.println(res == 0 ? sum - data[0] : -1);
    }
}

python代码:

n = int(input())
str = input().split(' ')
res = 0
sum = 0
num = []
for i in range(n):
    num.append(int(str[i]))
    res ^= int(str[i])
    sum += int(str[i])
num.sort()
if res == 0:
    print(sum - num[0])
else:
    print(-1)

c++代码:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin >> n;
    vector<int> nums(n);
    int res = 0;
    int sum = 0;
    for (int i=0; i<n; i++)
    {
        cin >> nums[i];
        res ^= nums[i];
        sum += nums[i];
    }
    sort(nums.begin(), nums.end());
    cout << (res ? -1 : (sum - nums[0])) << endl;

    return 0;
}

JsNode代码:

const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
let n;
rl.on('line', line => {
    str=line.split(" ")
    if (!n) {
        n=str[0];
    }else{
        a=new Array(n);
        let res=0,sum=0;
        for(let i=0;i<n;i++){
            a[i]=+str[i];
            res^=+str[i];
            sum+=a[i];
        }
        a.sort((x,y)=>x-y)
            console.log(res==0?sum-a[0]:-1)
    }
});
05-30 22:24