在这里插入图片描述

2025 B卷 100分 题型

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

华为OD机试真题《小明减肥》:


文章快捷目录

题目描述及说明

Java

python

JavaScript

C++

C

GO


题目名称:小明减肥


  1. 知识点:组合数学、回溯/枚举
  2. 时间限制:1秒
  3. 空间限制:256MB
  4. 限定语言:不限

题目描述

小明有n个可选运动,每个运动对应一个卡路里值。他需要从中选出k个运动,使得这些运动的卡路里总和恰好为t。给定nkt及每个运动的卡路里列表,求可行的方案数量。

输入描述

  • 第一行输入三个整数:n(运动数量,0 < n < 10)、t(目标卡路里总和,t > 0)、k(需选的运动数,0 < k ≤ n)。
  • 第二行输入n个正整数,表示每个运动的卡路里值(均 > 0),以空格分隔。

输出描述
输出满足条件的方案数量(整数)。

示例
输入:

4 3 2  
1 1 2 3  

输出:

2  

解释:可选方案为[1,2][1,2](注意重复卡路里值的不同索引视为不同方案)。


Java

问题分析

小明需要从n个运动中选择k个,使得它们的卡路里总和恰好为t。我们需要计算所有符合条件的组合数量。每个运动的卡路里值可能重复,但不同索引视为不同方案。

解题思路

  1. 回溯枚举:遍历所有可能的k元素组合,统计满足条件的方案数。
  2. 剪枝优化:在递归过程中,若已选元素超过k或总和超过t,提前终止该路径。
  3. 索引处理:通过限定遍历起始索引,确保生成的组合是无序且不重复的。

代码实现

import java.util.Scanner;public class Main {private static int n;        // 运动总数private static int t;        // 目标卡路里总和private static int k;        // 需要选的运动数private static int[] calories; // 各运动卡路里值数组private static int result = 0; // 合法方案计数器public static void main(String[] args) {Scanner scanner = new Scanner(System.in);// 读取输入参数n = scanner.nextInt();t = scanner.nextInt();k = scanner.nextInt();calories = new int[n];for (int i = 0; i < n; i++) {calories[i] = scanner.nextInt();}scanner.close();// 调用回溯函数,初始状态:从索引0开始,已选0个,总和0backtrack(0, 0, 0);System.out.println(result);}/*** 回溯函数,递归遍历所有可能的运动组合* @param start 当前处理的起始索引(避免重复组合)* @param count 已选的运动数目* @param sum   当前卡路里总和*/private static void backtrack(int start, int count, int sum) {// 剪枝:已选数目超过k,或总和超过t,直接返回if (count > k || sum > t) {return;}// 找到k个元素组合,判断是否符合总和要求if (count == k) {if (sum == t) {result++; // 符合条件,计数器加一}return; // 无论是否符合,均停止递归}// 遍历当前可选的索引范围 [start, n-1]for (int i = start; i < n; i++) {// 选择当前元素,递归处理下一个索引backtrack(i + 1, count + 1, sum + calories[i]);}}
}

代码解析

  1. 输入处理

    • 读取ntk和卡路里数值数组,存入对应变量。
  2. 回溯函数backtrack

    • 参数说明start确保组合按索引递增生成避免重复;count记录已选元素数量;sum记录当前总和。
    • 剪枝条件:若当前路径已不可能满足条件(数量超限或总和超限),提前终止。
    • 终止条件:当已选元素等于k时,检查总和是否等于t并更新计数器。
    • 循环遍历:从start开始依次选择元素,递归处理后续元素。

示例测试

  1. 输入示例1

    4 3 2  
    1 1 2 3  
    

    输出2
    解析:选择第0、2元素(1+2)和第1、2元素(1+2)。

  2. 输入示例2

    3 5 2  
    2 3 4  
    

    输出1
    解析:只有组合(2,3)满足和为5。

  3. 输入示例3

    5 10 3  
    2 2 3 3 4  
    

    输出1
    解析:组合(3,3,4)符合和为10。

综合分析

  1. 时间复杂度

    • 最坏情况为O(C(n,k)),例如取k个元素的组合数。由于n<10,实际运算量极小。
  2. 空间复杂度

    • 递归栈深度为k,复杂度O(k)。卡路里数组存储为O(n)。
  3. 正确性保障

    • 索引递增:避免重复组合,确保每个组合的唯一性。
    • 剪枝优化:提前终止无效路径,提升效率。
  4. 方案优势

    • 简洁高效:递归结构清晰,适用于小规模数据。
    • 无重复计算:通过索引递增生成组合,确保每个组合只处理一次。
  5. 适用场景

    • 需要枚举组合的小规模问题(如n≤10),例如算法竞赛或数据分析。

python

问题分析

小明需要从n个运动中选择k个,使其卡路里总和恰好为t。我们需要统计所有满足条件的组合数量,不同索引的同值卡路里视为不同方案。

解题思路

  1. 回溯枚举:遍历所有可能的k元素组合,统计满足条件的方案数。
  2. 剪枝优化:在递归过程中,若已选元素超过k或总和超过t,提前终止该路径。
  3. 索引递增策略:通过固定选择顺序避免重复组合。

代码实现

n, t, k = map(int, input().split())
calories = list(map(int, input().split()))
result = 0def b

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/907226.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/907226.shtml
英文地址,请注明出处:http://en.pswp.cn/news/907226.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构 -- 插入排序(直接插入排序和希尔排序)

插入排序 算法思想 每次将⼀个待排序的记录按其关键字大小插入到前面已排好序的子序列中&#xff0c;直到全部记录插入完成。 代码实现 void InsertSort(int A[],int n){int i,j,temp;for(i 1;i<n;i){if(A[i]<A[i-1]){temp A[i]; //用temp暂存A[i]for(ji-1;j>…

word中表格拉不动以及插入图片有间距

word中的表格宽度和高度怎么调整都改不了&#xff0c;可以将选中表格—右键—段落—取消勾选下图中的两项。 word中表格插入图片始终有间隙&#xff0c;怎么也消除不了间隙&#xff0c;可以在表布局—单元格边距—修改上下左右边距为0即可

网络抓包命令tcpdump及分析工具wireshark使用

文章目录 环境文档用途详细信息 环境 系统平台&#xff1a;Linux x86-64 Red Hat Enterprise Linux 8,Linux x86-64 Red Hat Enterprise Linux 7,Linux x86-64 SLES 12,银河麒麟 &#xff08;鲲鹏&#xff09;,银河麒麟 &#xff08;X86_64&#xff09;,银河麒麟&#xff08;龙…

Eigen矩阵存储顺序以及转换

一、Eigen矩阵存储顺序 在矩阵运算和线性代数中,"行优先"(Row-major)和"列优先"(Column-major)是两种不同的存储方式,它们决定了多维数组(如矩阵)在内存中的布局顺序。 1. 行优先(Row-major) 定义:矩阵按行顺序存储在内存中,即第一行的所有元…

快速部起一个Openwhisk平台,使用telego k8s服务部署能力内网部署

Telego 简介与 OpenWhisk 部署实践 概述 Telego 是一个用于便携式 Kubernetes 部署的工具&#xff0c;旨在解决容器镜像拉取中的网络代理问题。本文档描述了如何通过 Telego 将 Apache OpenWhisk&#xff08;一个 Serverless 计算平台&#xff09;部署到 Kubernetes 集群&…

LockSupport与Condition解析

本章我们介绍两个Java 并发包中用于线程协作的工具--LockSupport和Condition LockSupport&#xff1a; Java 并发包&#xff08;java.util.concurrent.locks&#xff09;提供了基于许可&#xff08;permit&#xff09;的线程阻塞和唤醒机制--LockSupport 对于LockSupport是通…

【机器学习基础】机器学习入门核心算法:逻辑回归(Decision Tree)

机器学习入门核心算法&#xff1a;逻辑回归&#xff08;Decision Tree&#xff09; 一、算法逻辑1.1 基本概念1.2 算法流程 二、算法原理与数学推导2.1 特征选择指标信息熵&#xff08;ID3算法&#xff09;信息增益&#xff08;Information Gain&#xff09;信息增益率&#xf…

网络编程3

管道的性质 读缓冲区为空&#xff0c;read阻塞写缓冲区为空&#xff0c;write阻塞一端先close&#xff0c;另一端继续read&#xff0c;read不阻塞&#xff0c;立刻返回0一端先close&#xff0c;另一端继续write&#xff0c;write会触发SIGPIPE信号&#xff0c;进程异常终止 soc…

influxdb时序数据库

以下概念及操作均来自influxdb2 官方文档 InfluxDB2 is the platform purpose-built to collect, store, process and visualize time series data. Time series data is a sequence of data points indexed in time order. Data points typically consist of successive meas…

洛谷 P3372 【模板】线段树 1

【题目链接】 洛谷 P3372 【模板】线段树 1 【题目考点】 1. 线段树 2. 树状数组 【解题思路】 本题要求维护区间和&#xff0c;实现区间修改、区间查询。 可以使用树状数组或线段树完成该问题&#xff0c;本文仅介绍使用线段树的解法。 解法1&#xff1a;线段树 线段树…

软件更新 | TSMaster 202504 版本已上线!三大功能让车载测试更智能

车载测试的智能化时代正在加速到来&#xff01;TSMaster 202504 版本正式发布&#xff0c;本次更新聚焦以太网通信与数据高效处理&#xff0c;带来三大核心功能升级—以太网报文信息过滤、XCP on Ethernet支持、按时间范围离线回放&#xff0c;助力工程师更精准、更灵活地完成测…

java-单列集合list与set。

集合定位&#xff1a;存储数据的容器 与数组的区别&#xff1a; 数组只能存储同种数据类型数据&#xff0c;集合可以存储不同类型的数据。 数组的长度一旦创建长度不可变&#xff0c;集合的长度是可变的 数组的操作单一&#xff0c;集合的操作比较丰富&#xff08;增删改查&…

ai之pdf解析工具 PPStructure 还是PaddleOCR

目录 重点是四 先用 PPStructure 版面分析,分成不同的块儿,再选用 PaddleOCR、或PPStructure基础路径OCR模型配置OCR模型配置GPU配置硬件配置性能配置一、框架选型对比分析1. **PaddleOCR核心能力**2. **PP-Structure核心能力**3. **选型结论**二、错误根因分析与修复方案1. …

Android计算机网络学习总结

TCP vs UDP 核心区别​​ ​题目​&#xff1a;TCP为什么称为可靠传输协议&#xff1f;UDP在哪些场景下比TCP更具优势&#xff1f; ​得分要点​&#xff1a; ​可靠性机制​ 三握四挥建立可靠连接确认应答&#xff08;ACK&#xff09; 超时重传滑动窗口流量控制拥塞控制&…

深入解析Java组合模式:构建灵活树形结构的艺术

引言&#xff1a;当对象需要树形组织时 在日常开发中&#xff0c;我们经常需要处理具有层次结构的对象集合。比如&#xff1a; 文件系统中的文件夹与文件GUI界面中的容器与控件企业组织架构中的部门与员工 这类场景中的对象呈现明显的整体-部分层次结构&#xff0c;如何优雅…

mobaxterm通过ssh登录docker无图形界面

1. 流程 下面是使用Mobaxterm通过SSH登录Docker无图形界面的步骤&#xff1a; 步骤 操作 1 在本地安装Mobaxterm 2 配置Mobaxterm连接SSH 3 启动Docker容器 4 在Mobaxterm中通过SSH连接到Docker容器 2. 操作步骤 步骤1&#xff1a;安装Mobaxterm 首先&#xff…

【赵渝强老师】HBase的体系架构

HBase是大表&#xff08;BigTable&#xff09;思想的一个具体实现。它是一个列式存储的NoSQL数据库&#xff0c;适合执行数据的分析和处理。简单来说&#xff0c;就是适合执行查询操作。从体系架构的角度看&#xff0c;HBase是一种主从架构&#xff0c;包含&#xff1a;HBase H…

linux 新增驱动宏config.in配置

‌1. 添加配置宏步骤‌ ‌1.1 修改 Kconfig&#xff08;推荐方式&#xff09;‌ ‌定位 Kconfig 文件‌ 内核各子目录&#xff08;如 drivers/char/&#xff09;通常包含 Kconfig 文件&#xff0c;用于定义模块配置选项7。‌添加宏定义‌ 示例&#xff1a;在 drivers/char/Kc…

关于git的使用

下载git 可以去git的官网下载https://git-scm.com/downloads 也可以去找第三方的资源下载&#xff0c;下载后是一个exe应用程序&#xff0c;直接点开一直下一步就可以安装了 右键任意位置显示这两个就代表成功&#xff0c;第一个是git官方的图形化界面&#xff0c;第二个是用…

WPF【11_8】WPF实战-重构与美化(UI 与视图模型的联动,实现INotifyPropertyChanged)

11-13 【重构】INotifyPropertyChanged 与 ObservableCollection 现在我们来完成新建客户的功能。 当用户点击“客户添加”按钮以后系统会清空当前所选定的客户&#xff0c;客户的详细信息以及客户的预约记录会从 UI 中被清除。然后我们就可以在输入框中输入新的客户信息了&am…