
目录
- 专栏导读
- 一、题目描述
- 二、输入描述
- 三、输出描述
- 四、解题思路
- 五、Java算法源码
- 六、效果展示
- 1、输入
- 2、输出
- 3、说明
- 核心算法:按照二进制加法计算,并且不计算进位。
- 但是,B希望在满足A的情况下获取苹果重量最多。
 
 
 
华为OD机试 2023B卷题库疯狂收录中,刷题点这里
专栏导读
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
一、题目描述
A、B两个人把苹果分为两堆。
A希望按照他的计算规则等分苹果,他的计算规则是按照二进制加法计算,并且不计算进位12+5=9(1100+0101=9);
B的计算规则是十进制加法,包括正常进位,B希望在满足A的情况下获取苹果重量最多。
输入苹果的数量和每个苹果重量,输出满足A的情况下B获取的苹果总重量。
如果无法满足A的要求,输出-1。
数据范围
1<=总苹果数量<=20000
1<=每个苹果重量<=10000
二、输入描述
输入第一行是苹果数量:3
输入第二行是每个苹果重量:3 5 6
三、输出描述
输出第一行是B获取的苹果总重量:11
四、解题思路
这道题的主要问题是题意的理解。
A的算法规则:按照二进制加法计算,并且不计算进位
输出满足A的情况下B获取的苹果总重量。
满足A的情况,是什么情况?
再读一遍,按照二进制加法计算,并且不计算进位。
我的理解是相加等于0就算满足A规则。
例如3 5 6。
- 3的二进制是11;
- 5的二进制是101;
- 6的二进制是110;
核心算法:按照二进制加法计算,并且不计算进位。
- 3 + 5 = 11 + 101 = 110,十进制是6;
- 第三个也是6,即平分;
也可以理解为:
3 + 5 + 6 = 11 + 101 + 110 = 000即0,满足A算法,即平分。
A算法的核心就是异或总结果为0时,满足A算法规则。
五、Java算法源码
package com.guor.od;
import java.util.*;
public class OdTest02 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // 苹果数量
        int n = Integer.parseInt(sc.nextLine());
        // 每个苹果重量
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = sc.nextInt();
        }
        int sum = 0;
        int min = Integer.MAX_VALUE;
        int tempSum = 0;
        for (int i = 0; i < n; i++) {
            // B计算的苹果总数
            sum += arr[i];
            // A算法的核心就是异或总结果为0
            tempSum ^= arr[i];
            if (min > arr[i]) {
                // 找到最小的值
                min = arr[i];
            }
        }
        // 苹果可以分
        if (tempSum == 0) {
            // 则B拿到苹果数为:总数-最小数
            int bSum = sum - min;
            System.out.println(bSum);
        } else {
            // 不可以分苹果时输出 -1
            System.out.println(-1);
        }
    }
}
六、效果展示
1、输入
3
 3 5 6
2、输出
11
3、说明
- 3的二进制是11;
- 5的二进制是101;
- 6的二进制是110;
核心算法:按照二进制加法计算,并且不计算进位。
3 + 5 = 11 + 101 = 110,十进制是6;
 第三个也是6,即平分;
也可以理解为:
3 + 5 + 6 = 11 + 101 + 110 = 000即0,满足A算法,即平分。
按照A的算法,A获得6个苹果,剩下的都归B。
一共 3 + 5 +6 = 14个苹果,A拿了6个,B得到了8个苹果。
但是,B希望在满足A的情况下获取苹果重量最多。
还有其它情况吗?
5 + 6 = 101 + 110 = 11即3,满足A算法,即平分。
哈哈,A只获得了3个苹果,B获得了11个苹果。
这也提醒了大家,千万不要在代码中炫技。十进制平分你不干,非得来个二进制不进位分苹果,哎,A亏大了。

🏆下一篇:华为OD机试 - 荒岛求生 - 栈Stack(Java 2023 B卷 100分)
🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。




















