当前位置: 首页 > article >正文

华为OD机试真题——会议接待 /代表团坐车(2025A卷:200分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

在这里插入图片描述

2025 A卷 200分 题型

本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析;
并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式!

本文收录于专栏:《2025华为OD真题目录+全流程解析/备考攻略/经验分享》

华为OD机试真题《会议接待 /代表团坐车》:


目录

    • 题目名称:会议接待 /代表团坐车
      • 题目描述
    • Java
      • 问题分析
      • 解题思路
      • 代码实现
      • 代码详细解析
      • 示例测试
        • 示例1输入:
        • 示例2输入:
        • 示例3输入:
      • 综合分析
    • python
      • 问题分析
      • 解题思路
      • 代码实现
      • 代码详细解析
      • 示例测试
        • 示例1输入:
        • 示例2输入:
        • 示例3输入:
      • 综合分析
    • JavaScript
      • 问题分析
      • 解题思路
      • 代码实现
      • 代码详细解析
      • 示例测试
        • 示例1输入:
        • 示例2输入:
        • 示例3输入:
      • 综合分析
    • C++
      • 问题分析
      • 解题思路
      • 代码实现
      • 代码详细解析
        • 1. 输入处理
        • 2. 字符串分割
        • 3. 动态规划数组初始化
        • 4. 动态规划核心逻辑
        • 5. 输出结果
      • 示例测试
        • 示例1输入:
        • 示例2输入:
        • 示例3输入:
      • 综合分析
    • C语言
      • 问题分析
      • 解题思路
      • 代码实现
      • 代码详细解析
      • 示例测试
        • 示例1输入:
        • 示例2输入:
        • 示例3输入:
      • 综合分析
    • GO
      • 问题分析
      • 解题思路
      • 代码实现
      • 代码详细解析
      • 示例测试
        • 示例1输入:
        • 示例2输入:
        • 示例3输入:
      • 综合分析


题目名称:会议接待 /代表团坐车


  • 知识点:动态规划(背包问题)
  • 时间限制:1秒
  • 空间限制:256MB
  • 限定语言:不限

题目描述

某组织举行会议,来了多个代表团同时到达,接待处只有一辆汽车,可以同时接待多个代表团。为提高车辆利用率,请帮接待员计算可以坐满车的接待方案,输出方案数量。

约束条件

  1. 一个代表团只能上一辆车,且代表团人数(每个代表团人数≤30,总数量≤30)必须小于汽车容量(≤100)。
  2. 必须将车辆坐满,即所选代表团人数总和等于汽车容量。

输入描述

  • 第一行为各代表团人数,以英文逗号分隔(如 5,4,2,3,2,4,9)。
  • 第二行为汽车载客量(如 10)。

输出描述

  • 输出坐满汽车的方案数量,若无解则输出 0

示例
输入:

5,4,2,3,2,4,9  
10  

输出:

4  

说明
可能的组合为 [2,3,5][2,4,4][2,3,5][2,4,4](允许重复选择不同索引的相同数值代表团,但每个代表团仅能被选一次)。

补充说明

  • 代表团人数按输入顺序排列,组合需严格满足总和等于汽车容量。
  • 动态规划(背包问题)或回溯法为典型解法。

Java

问题分析

我们需要计算从代表团中选择若干代表团,使其人数之和等于汽车的容量,且每个代表团只能被选一次。这是一个典型的0-1背包问题,要求恰好装满背包的方案数。


解题思路

  1. 动态规划定义
    • dp[j] 表示总和为 j 的方案数。
  2. 状态转移
    • 遍历每个代表团人数 num,从后向前更新 dp[j]dp[j] += dp[j - num]
  3. 初始化
    • dp[0] = 1,表示总和为0的方案数为1(不选任何代表团)。

代码实现

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);// 读取代表团人数String[] parts = scanner.nextLine().split(",");int[] nums = new int[parts.length];for (int i = 0; i < parts.length; i++) {nums[i] = Integer.parseInt(parts[i]);}// 读取汽车容量int capacity = Integer.parseInt(scanner.nextLine());int[] dp = new int[capacity + 1];dp[0] = 1; // 初始化:总和为0的方案数为1(不选任何代表团)// 动态规划处理每个代表团人数for (int num : nums) {// 从后向前遍历,确保每个代表团只被选一次for (int j = capacity; j >= num; j--) {dp[j] += dp[j - num];}}// 输出结果System.out.println(dp[capacity]);}
}

代码详细解析

  1. 输入处理

    • 使用 Scanner 读取输入,将代表团人数分割为整数数组 nums
    • 读取汽车容量 capacity
  2. 动态规划数组初始化

    • dp 数组长度为 capacity + 1,初始时 dp[0] = 1,其余为0。
  3. 遍历每个代表团人数

    • 对每个 num,从 capacitynum 逆序遍历,更新 dp[j]
      for (int j = capacity; j >= num; j--) {dp[j] += dp[j - num];
      }
      
    • 逆序遍历确保每个代表团仅被考虑一次(0-1背包特性)。
  4. 输出结果

    • dp[capacity] 存储了恰好装满汽车的方案数。

示例测试

示例1输入:
5,4,2,3,2,4,9  
10  

输出

4  

解析
可能的组合为:

  • 5(索引0)、2(索引2)、3(索引3)
  • 4(索引1)、4(索引5)、2(索引4)
  • 5(索引0)、2(索引4)、3(索引3)
  • 4(索引1)、4(索引5)、2(索引2)
示例2输入:
2,2  
4  

输出

1  

解析
唯一方案:选择两个2(不同索引)。

示例3输入:
1,1,1  
3  

输出

1  

解析
唯一方案:选择所有三个1。


综合分析

  1. 时间复杂度O(N×C)

    • N 为代表团数量,C 为汽车容量。每个代表团需遍历 C 次。
  2. 空间复杂度

    • 仅需一个长度为 C+1 的数组。
  3. 优势

    • 高效准确:动态规划严格保证最优解。
    • 空间优化:一维数组节省内存。
    • 处理大容量:使用 int 数组避免溢出(假设结果在 int 范围内)。
  4. 适用场景

    • 代表团数量较大(如 N=30),汽车容量适中(如 C=100)。

python

问题分析

我们需要从代表团中选择若干代表团,使它们的人数之和等于汽车容量,且每个代表团只能被选一次。这是一个典型的0-1背包问题,要求恰好装满背包的方案数。


解题思路

  1. 动态规划定义
    • dp[j] 表示总和为 j 的方案数。
  2. 状态转移
    • 遍历每个代表团人数 num,从后向前更新 dp[j]dp[j] += dp[j - num]
  3. 初始化
    • dp[0] = 1,表示总和为0的方案数为1(不选任何代表团)。

代码实现

def main():import sys# 读取输入input_lines = sys.stdin.read().splitlines()nums = list(
http://www.lryc.cn/news/2395309.html

相关文章:

  • LabVIEW Val (Sgnl) 属性
  • STM32G4 电机外设篇(三) TIM1 发波 和 ADC COMP DAC级联
  • DAY 35 超大力王爱学Python
  • 【数据结构】图的存储(十字链表)
  • 005 flutter基础,初始文件讲解(4)
  • Redis最佳实践——秒杀系统设计详解
  • STM32软件spi和硬件spi
  • MATLAB实战:人脸检测与识别实现方案
  • 深度刨析树结构(从入门到入土讲解AVL树及红黑树的奥秘)
  • 【Linux】shell的条件判断
  • 第九天:java注解
  • 十一、【核心功能篇】测试用例管理:设计用例新增编辑界面
  • react-native的token认证流程
  • ERP系统中商品定价功能设计:支持渠道、会员与批发场景的灵活定价机制
  • Spring是如何实现属性占位符解析
  • 数据结构之ArrayList
  • DDR4读写压力测试
  • uniapp 开发企业微信小程序时,如何在当前页面真正销毁前或者关闭小程序前调用一个api接口
  • WPF 按钮点击音效实现
  • 编写测试用例
  • 解释程序(Python)不需要生成机器码 逐行解析 逐行执行
  • 每日Prompt:隐形人
  • TensorFlow深度学习实战(19)——受限玻尔兹曼机
  • 告别手动绘图!基于AI的Smart Mermaid自动可视化图表工具搭建与使用指南
  • 【Oracle】安装单实例
  • C++测开,自动化测试,业务(第一段实习)
  • QT中更新或添加组件时出现“”qt操作至少需要一个处于启用状态的有效资料档案库“解决方法”
  • 论文速读《UAV-Flow Colosseo: 自然语言控制无人机系统》
  • ES6+中Promise 中错误捕捉详解——链式调用catch()或者async/await+try/catch
  • CDN安全加速:HTTPS加密最佳配置方案