华为OD机试真题——分苹果(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

发布于:2025-05-27 ⋅ 阅读:(79) ⋅ 点赞:(0)

在这里插入图片描述

2025 A卷 100分 题型

本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式;
并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析;
本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分享

华为OD机试真题《分苹果》:


文章快捷目录

题目描述及说明

Java

python

JavaScript

C++

C

GO


题目名称:分苹果


  1. 知识点:位运算(异或)、贪心算法
  2. 时间限制:1秒
  3. 空间限制:256MB
  4. 限定语言:不限

题目描述

A和B两个人分苹果。A希望按照他的计算规则平分苹果,他的计算规则是二进制加法不进位(即异或操作),例如:12 + 5 = 9(1100 ⊕ 0101 = 1001)。B的计算规则是十进制加法(正常进位)。B希望在满足A的要求下,获得尽可能多的苹果总重量。若无法满足A的要求,则输出-1。

输入描述

  • 第一行为苹果数量n(1 ≤ n ≤ 20000)。
  • 第二行为每个苹果的重量w₁, w₂, …, wₙ(1 ≤ wᵢ ≤ 10000)。

输出描述

  • 满足A要求时,B能获得的最大苹果总重量;否则输出-1。

示例
输入:

3  
3 5 6  

输出:

11  

说明:3 ⊕ 5 ⊕ 6 = 0,满足A的要求,B拿走5和6,总重量为11。


Java

问题分析

题目要求A和B分苹果,A的规则是异或操作平分,B希望获得最大总重量。核心问题在于:

  1. 异或总和是否为0:若不为0,无法平分,直接返回-1。
  2. 最大总重量计算:当异或总和为0时,B应拿走除最小苹果外的所有苹果,确保总重量最大。

解题思路

  1. 异或总和检查:遍历所有苹果计算异或总和。若非0,直接返回-1。
  2. 贪心选择:若异或总和为0,总重量减去最小苹果重量即为B能获得的最大值。

代码实现

import java.util.Scanner;

public class Main {
   
    public static void main(String[] args) {
   
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt(); // 读取苹果数量
        int[] apples = new int[n]; // 存储每个苹果的重量
        
        // 读取苹果重量并计算异或总和、总重量、最小重量
        int xorSum = 0;
        int totalSum = 0;
        int minApple = Integer.MAX_VALUE;
        for (int i = 0; i < n; i++) {
   
            apples[i] = scanner.nextInt();
            xorSum ^= apples[i];       // 异或总和
            totalSum += apples[i];     // 总重量
            if (apples[i] < minApple) {
   
                minApple = apples[i];  // 更新最小重量
            }
        }
        
        // 异或总和非0,无法满足A的规则,输出-1
        if (xorSum != 0) {
   
            System.out.println(-1);
        } else {
   
            // 输出总重量减去最小苹果的重量
            System.out.println(totalSum - minApple);
        }
    }
}

代码解析

  1. 输入处理

    • Scanner 读取输入数据。
    • n 存储苹果数量,apples 数组存储每个苹果重量。
  2. 计算关键值

    • xorSum:所有苹果异或的总和,用于判断是否能平分。
    • totalSum:所有苹果的总重量。
    • minApple:所有苹果中的最小重量,用于贪心策略。
  3. 判断条件

    • xorSum != 0,输出-1(无法满足A

网站公告

今日签到

点亮在社区的每一天
去签到