華為OD機試真題—— 小明減肥(2025B卷:100分)Java/python/JavaScript/C/C++/GO最佳實現

在這里插入圖片描述

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…