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

华为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)}
http://www.gsyq.cn/news/164513.html

相关文章:

  • 收藏必备!前端转网络安全全攻略:10大高薪岗位详解+零基础学习资源
  • ‌自动化测试数据管理最佳实践
  • 如何入门Appium-移动端自动测试框架?
  • 实时欺诈检测:基于TensorFlow的流式数据分析
  • 万亿参数模型训练展望:TensorFlow Parameter Server演进
  • TensorFlow Lite Micro:微控制器上的AI实现路径
  • Java小白面试实录:从Spring Boot到微服务的全面考核
  • 国产GPU适配TensorFlow现状调研报告
  • EtherCAT 转 Modbus RTU 网关赋能电力能源:倍福 PLC 与横河 DY 涡街流量计通讯案例
  • 迁移学习实战:使用TensorFlow Hub快速构建模型
  • 自定义Layer与Loss:深入理解TensorFlow 2.x API
  • backup Karpathy x
  • 大模型训练瓶颈突破:TensorFlow AllReduce优化原理
  • 测试用例设计方法
  • 在线学习系统构建:TensorFlow Streaming Learning模式
  • BERT中文情感分析:TensorFlow版Hugging Face整合指南
  • 禅道应用场景1
  • 详细介绍:React Hydration 错误修复文档 server rendered text didn‘t match the client.
  • Docker 是什么
  • 多模态AI系统构建:TensorFlow处理图文混合数据
  • TFRecord格式详解:高效存储与读取大规模数据集
  • 【两阶段鲁棒微网】【不确定性】基于关键场景辨别算法的两阶段鲁棒微网优化调度(Matlab代码实现)
  • 自动化测试报告:从数据到决策的转变
  • RESTful API封装TensorFlow模型:Flask + TF集成指南
  • 生成式AI重构测试自动化体系的五大维度
  • 多任务学习实现:共享底层网络的TensorFlow架构
  • 流量为王时代下AI智能名片链动2+1模式商城小程序的商业价值研究
  • 免费的AIGC论文检测网站口碑爆棚,Paperyy/WritePass/知网查重/维普查重AIGC论文检测网站怎么选择 - 品牌推荐师
  • 三菱自动售货机及自动售卖机功能介绍
  • 构建可扩展的自动化测试框架:架构设计与工程实践