news 2026/4/15 12:35:57

华为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/4/15 12:35:12

测试自动化与DevOps的融合:软件交付的加速引擎

速度时代的质量困局 在DevOps"持续交付"的浪潮下&#xff0c;测试环节常成为流水线瓶颈。行业数据显示&#xff08;2025 State of DevOps Report&#xff09;&#xff0c;高效能团队自动化测试覆盖率超80%&#xff0c;而传统团队不足30%。这种差距直接导致&#xff…

作者头像 李华
网站建设 2026/4/2 12:54:06

AI就业黄金时代:5大高薪岗位全解析+零基础入门学习路线(建议收藏)_【25年最新】普通人逆袭AI年薪50万+的完整路线图

世界经济论坛预测到2030年AI领域将创造大量就业机会&#xff0c;全球AI市场将持续高速增长。中国AI人才需求旺盛&#xff0c;一线城市岗位薪资丰厚。文章详细介绍了AI运营、算法工程师、大模型工程师、AI应用工程师和AI产品经理五大热门岗位的职责、技能要求和薪资水平&#xf…

作者头像 李华
网站建设 2026/4/11 9:03:33

Node.js后端集成TensorFlow.js服务可行性验证

Node.js后端集成TensorFlow.js服务可行性验证 在如今AI能力加速向业务系统渗透的背景下&#xff0c;越来越多的企业开始探索如何将机器学习模型无缝嵌入现有服务架构。传统做法通常是将模型部署在独立的Python服务中&#xff0c;通过REST或gRPC接口供主业务调用——这种“分离式…

作者头像 李华
网站建设 2026/4/9 4:26:41

异常检测算法实现:TensorFlow Autoencoder实战

异常检测算法实现&#xff1a;TensorFlow Autoencoder实战 在工业物联网和智能制造的浪潮中&#xff0c;设备每时每刻都在产生海量运行数据——温度、振动、电流、压力……这些信号本应是系统的“生命体征”&#xff0c;但当异常悄然发生时&#xff0c;它们也可能成为故障前最后…

作者头像 李华
网站建设 2026/4/13 14:48:07

多模态AI系统构建:TensorFlow处理图文混合数据

多模态AI系统构建&#xff1a;TensorFlow处理图文混合数据 在今天的智能应用中&#xff0c;单一模态的模型已经难以满足真实场景的需求。比如你在电商平台上看到一张“复古风连衣裙”的图片&#xff0c;下面却写着“适用于户外登山”&#xff0c;这种图文不一致的情况不仅影响用…

作者头像 李华