news 2026/6/10 15:53:18

(新卷,100分)- 计算礼品发放的最小分组数目(Java JS Python)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
(新卷,100分)- 计算礼品发放的最小分组数目(Java JS Python)

(新卷,100分)- 计算礼品发放的最小分组数目(Java & JS & Python)

题目描述

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

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

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

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

输入描述

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

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

输出描述

输出最小分组数量

用例
输入5
1 2 5
输出2
说明
题目解析

最优分组策略是将商品尽可能两两配对,避免出现单独分组的情况。

首先,排除所有单价超过上限的商品,这些商品必须单独分组。

对于剩余商品,应采用最小价格与最大价格配对的方式。例如商品价格为1、1、3、4时,若将1和1配对,会导致3和4被迫单独分组;而将1与3、1与4配对,则可减少一组数量。这种策略能最大化分组效率。

JavaScript算法源码
/* JavaScript Node ACM模式 控制台输入获取 */ const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); const lines = []; rl.on("line", (line) => { lines.push(line); if (lines.length === 2) { const max = lines[0] - 0; const arr = lines[1].split(" ").map(Number); console.log(getResult(max, arr)); lines.length = 0; } }); function getResult(max, arr) { // 将商品按价格从小到大排序 arr.sort((a, b) => a - b); let count = 0; let l = 0; // l指针指向最小价格的商品 let r = arr.length - 1; // r指针指向最大价格的商品 // 如果商品价格不超过上限,则优先最小价格和最大价格组合 while (l < r) { const sum = arr[l] + arr[r]; // 如果最小价格+最大价格 不超过上限,则组合,否则最大价格独立一组 if (sum <= max) l++; r--; count++; } if (l === r) count++; return count; }
Java算法源码
import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int max = Integer.parseInt(sc.nextLine()); Integer[] arr = Arrays.stream(sc.nextLine().split(" ")).map(Integer::parseInt).toArray(Integer[]::new); System.out.println(getResult(max, arr)); } public static int getResult(int max, Integer[] arr) { // 将商品按价格从小到大排序 Arrays.sort(arr); int count = 0; int l = 0; // l指针指向最小价格的商品 int r = arr.length - 1; // r指针指向最大价格的商品 // 如果商品价格不超过上限,则优先最小价格和最大价格组合 while (l < r) { int sum = arr[l] + arr[r]; // 如果最小价格+最大价格 不超过上限,则组合,否则最大价格独立一组 if (sum <= max) l++; r--; count++; } if (l == r) count++; return count; } }
Python算法源码
# 输入获取 maxPrice = int(input()) prices = list(map(int, input().split())) # 算法入口 def getResult(): # 将商品按价格从小到大排序 prices.sort() count = 0 l = 0 # l指针指向最小价格的商品 r = len(prices) - 1 # r指针指向最大价格的商品 # 如果商品价格不超过上限,则优先最小价格和最大价格组合 while l < r: sumPrice = prices[l] + prices[r] # 如果最小价格+最大价格 不超过上限,则组合,否则最大价格独立一组 if sumPrice <= maxPrice: l += 1 r -= 1 count += 1 if l == r: count += 1 return count # 算法调用 print(getResult())
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 10:39:13

广州鞋都商家必看:AI套图突围!让你的高跟鞋,撑起产地时尚牌

广州鞋都的老板们&#xff0c;别让好鞋输在“颜值”上&#xff01;咱们手握顶尖供应链&#xff0c;吃透最新时尚版型&#xff0c;做出来的高跟鞋质感拉满——可偏偏&#xff0c;主图还是千篇一律的纯白背景&#xff0c;详情页只剩枯燥的材质堆砌。久而久之&#xff0c;“广州制…

作者头像 李华
网站建设 2026/6/10 10:44:12

【金融项目实战】5_功能测试 _业务流程测试

文章目录 一、发布借款业务1.1 发布借款单成功操作流程1.2 借款业务测试点1.3 借款业务测试用例 二、投资业务2.1 投资业务成功操作流程2.2 投资业务测试点2.3 投资业务测试案例 一、发布借款业务 1.1 发布借款单成功操作流程 1、登录成功 2、开通资金托管账号&#xff08;认…

作者头像 李华
网站建设 2026/6/10 10:46:37

计算机SSM毕设实战-基于ssm的智能密室逃脱信息管理系统的设计与实现主题管理、在线预约、运营管理【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/6/10 12:13:45

SSM毕设选题推荐:基于ssm的智能密室逃脱信息管理系统的设计与实现智能密室逃脱游戏信息管理系统【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/6/10 12:13:09

Python在2024年的主要趋势与发展方向

SQLAlchemy是Python中最流行的ORM&#xff08;对象关系映射&#xff09;框架之一&#xff0c;它提供了高效且灵活的数据库操作方式。本文将介绍如何使用SQLAlchemy ORM进行数据库操作。目录安装SQLAlchemy核心概念连接数据库定义数据模型创建数据库表基本CRUD操作查询数据关系操…

作者头像 李华