华为OD机试统一考试D卷C卷 - 剩余银饰的重量 py
题目描述
有 N
块二手市场收集的银饰,每块银饰的重量都是正整数,收集到的银饰会被熔化用于打造新的饰品。 每一回合,从中选出三块 最重的 银饰,然后一起熔掉。假设银饰的重量分别为 x
、y
和 z
,且 x <= y <= z
。那么熔掉的可能结果如下:
-
如果
x == y == z
,那么三块银饰都会被完全熔掉; -
如果
x == y
且y != z
,会剩余重量为z - y
的银块无法被熔掉; -
如果
x != y
且y == z
,会剩余重量为y - x
的银块无法被熔掉; -
如果
x != y
且y != z
,会剩余重量为z - y
与y - x
差值的银块无法被熔掉。
如果剩余两块,返回较大的重量(若两块重量相同,返回任意一块皆可);如果只剩下一块,返回该块的重量;如果没有剩下,就返回 0
。
输入描述
输入数据为两行
第一行为银饰数组长度 n
,1 ≤ n ≤ 40
,
第二行为 n
块银饰的重量,重量的取值范围为[1,2000]
,重量之间使用空格隔开
输出描述
如果剩余两块,返回较大的重量(若两块重量相同,返回任意一块皆可);如果只剩下一块,返回该块的重量;如果没有剩下,就返回 0
。
示例一
输入
3
1 1 1
输出
0
说明
选出 1 1 1
,得到 0
,最终数组转换为 []
,最后没有剩下银块,返回 0
示例二
输入
3
3 7 10
输出
1
说明
选出 3 7 10
,需要计算 (7-3)
和 (10-7)
的差值,即(7-3)-(10-7)=1
,所以数组转换为 [1]
,剩余一块,返回该块重量,返回 1
Java
import java.util.PriorityQueue;
import java.util.Scanner;
import java.util.Collections;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 读取银饰的数量
int n = scanner.nextInt();
// 创建优先队列,使用反向顺序以便队列头是最大元素
PriorityQueue<Integer> silverPieces = new PriorityQueue<>(Collections.reverseOrder());
// 循环读取每块银饰的重
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2024华为OD机试E卷D卷题 文章被收录于专栏
本专栏给大家提供了华为2024最新华为OD(D)卷的题目汇总。华为OD机试刷题记录机考算法题库,帮助你上岸华为。提供C++/Java、JavaScript、Python四种语言的解法。