news 2026/6/15 19:29:47

华为OD机试真题 【计算礼品发送的最小分组数目】 (C++ Python JAVA JS GO)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
华为OD机试真题 【计算礼品发送的最小分组数目】 (C++ Python JAVA JS GO)

计算礼品发送的最小分组数目

华为OD机试真题 - 华为OD上机考试真题 100分题型

华为OD机试真题目录点击查看: 华为OD机试真题题库目录|机考题库 + 算法考点详解

题目描述

又到了一年的末尾,项目组让小明负责新年晚会的小礼品发放工作。

为使得参加晚会的同事所获得的小礼品价值相对平衡,需要把小礼品根据价格进行分组,但每组最多只能包括两件小礼品,并且每个分组的价格总和不能超过一个价格上限

为了保证发放小礼品的效率,小明需要找到分组数目最少的方案。

你的任务是写一个程序,找出分组数最少的分组方案,并输出最少的分组数目

输入描述

第一行数据为分组礼品价格之和的上限

第二行数据为每个小礼品的价格,按照空格隔开,每个礼品价格不超过分组价格和的上限

输出描述

输出最小分组数量

用例1

输入

5 1 2 5

输出

2

题解

思路:贪心 + 双指针

  1. 这道题要求找到分组数目最少的方案, 并且每个分组包含一个或两个礼品,可以推导出要想分组数目越少,就是两个组合的分组个数越多,总分组数量越少。
  2. 基于上面的分析,要想两个数量分组越多,应该尽可能选择当前最低价格 + 当前最高价格商品尝试组合,如果当前总价格小于等于限定价格,则将它们组合在一起,如果不能则当前分组选择当前最佳价格对后续两两组合创造更多可能性。
  3. 根据1 2分析,代码逻辑就是对输入礼品进行升序排序,然后定义left =0, right = n-1,使用双指针逻辑实现2的逻辑,最终最小分组数。

c++

#include<iostream> #include<vector> #include<string> #include <utility> #include <sstream> #include<algorithm> #include<cmath> #include<map> using namespace std; // 通用 切割函数 函数 将字符串str根据delimiter进行切割 vector<int> split(const string& str, const string& delimiter) { vector<int> result; size_t start = 0; size_t end = str.find(delimiter); while (end != string::npos) { result.push_back(stoi(str.substr(start, end - start))); start = end + delimiter.length(); end = str.find(delimiter, start); } // 添加最后一个部分 result.push_back(stoi(str.substr(start))); return result; } int main() { int maxMoney; cin >> maxMoney; cin.ignore(); string input; getline(cin, input); vector<int> nums = split(input, " "); sort(nums.begin(), nums.end()); int count = 0; int left = 0, right = nums.size() - 1; while (left <= right) { // 剩最后一个 if (left == right) { count++; break; } // 可以选择两个 if (nums[left] + nums[right] <= maxMoney) { left++; } right--; count++; } cout << count; return 0; }

JAVA

import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int maxMoney = Integer.parseInt(br.readLine().trim()); String input = br.readLine().trim(); String[] parts = input.split(" "); List<Integer> nums = new ArrayList<>(); for (String p : parts) { nums.add(Integer.parseInt(p)); } // 排序 Collections.sort(nums); int count = 0; int left = 0, right = nums.size() - 1; while (left <= right) { // 剩最后一个 if (left == right) { count++; break; } // 可以选择两个 if (nums.get(left) + nums.get(right) <= maxMoney) { left++; } right--; count++; } System.out.println(count); } }

Python

importsysdefmain():maxMoney=int(sys.stdin.readline().strip())nums=list(map(int,sys.stdin.readline().strip().split()))nums.sort()count=0left,right=0,len(nums)-1whileleft<=right:# 剩最后一个ifleft==right:count+=1break# 可以选择两个ifnums[left]+nums[right]<=maxMoney:left+=1right-=1count+=1print(count)if__name__=="__main__":main()

JavaScript

constreadline=require("readline");constrl=readline.createInterface({input:process.stdin,output:process.stdout});letlines=[];rl.on("line",line=>lines.push(line));rl.on("close",()=>{letidx=0;constmaxMoney=parseInt(lines[idx++]);constnums=lines[idx++].trim().split(" ").map(Number);nums.sort((a,b)=>a-b);letcount=0;letleft=0,right=nums.length-1;while(left<=right){// 剩最后一个if(left===right){count++;break;}// 可以选择两个if(nums[left]+nums[right]<=maxMoney){left++;}right--;count++;}console.log(count);});

Go

packagemainimport("bufio""fmt""os""sort""strconv""strings")funcmain(){in:=bufio.NewReader(os.Stdin)varmaxMoneyintfmt.Fscanln(in,&maxMoney)line,_:=in.ReadString('\n')line=strings.TrimSpace(line)parts:=strings.Split(line," ")nums:=make([]int,0,len(parts))for_,p:=rangeparts{val,_:=strconv.Atoi(p)nums=append(nums,val)}// 排序sort.Ints(nums)count:=0left,right:=0,len(nums)-1forleft<=right{// 剩最后一个ifleft==right{count++break}// 可以选择两个ifnums[left]+nums[right]<=maxMoney{left++}right--count++}fmt.Println(count)}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 21:05:02

ZeRO-Infinity启发下的TensorFlow分布式优化设想

ZeRO-Infinity启发下的TensorFlow分布式优化设想 在大模型训练日益成为AI研发核心任务的今天&#xff0c;显存墙与通信瓶颈正不断挑战着现有框架的极限。尽管PyTorch凭借FSDP和DeepSpeed生态在超大规模训练中崭露头角&#xff0c;但TensorFlow作为工业界广泛部署的稳定平台&…

作者头像 李华
网站建设 2026/6/15 12:56:40

AI工程师必看:TensorFlow镜像优化技巧汇总

AI工程师必看&#xff1a;TensorFlow镜像优化技巧汇总 在现代机器学习工程实践中&#xff0c;一个看似不起眼的环节——容器镜像的选择与构建&#xff0c;往往决定了整个MLOps流水线的成败。你是否经历过这样的场景&#xff1a;本地训练效果很好&#xff0c;部署到生产环境却报…

作者头像 李华
网站建设 2026/6/15 12:55:02

自动驾驶背后的推手:TensorFlow在智能交通中的角色

自动驾驶背后的推手&#xff1a;TensorFlow在智能交通中的角色 在一辆自动驾驶汽车驶过城市街道的瞬间&#xff0c;它需要完成超过百万次的计算——识别行人、判断红绿灯状态、预测周围车辆轨迹、实时调整路径。这些看似“本能”的反应&#xff0c;背后是一整套复杂的人工智能系…

作者头像 李华
网站建设 2026/6/15 14:13:54

为什么说TensorFlow是工业级机器学习的基石?

TensorFlow为何是工业级机器学习的基石&#xff1f; 在今天的AI系统设计中&#xff0c;一个核心挑战始终摆在工程师面前&#xff1a;如何让一个在实验室里表现优异的模型&#xff0c;真正扛得住生产环境中的高并发、低延迟和长期稳定运行&#xff1f;学术界追求的是SOTA&#x…

作者头像 李华
网站建设 2026/6/15 12:56:11

基于Spring Boot的音乐网站系统

基于Spring Boot的音乐网站系统是一款高效、灵活且易于扩展的音乐服务平台。以下是对该系统的详细介绍&#xff1a; 一、系统概述 该系统采用Java作为开发语言&#xff0c;Spring Boot作为后端框架&#xff0c;MySQL作为数据库&#xff0c;同时结合了Vue.js、CSS、JavaScript等…

作者头像 李华