有 N 块 二手市场9 收集的银饰,每块银饰的重量都是正整数,!
收集到的银饰会被熔化用于打造新的饰品。
每一回合,从中选出三块最重的银饰,然后一起熔掉。
假设银饰的重量分别为 x、y和z,且xsy≤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,1sn≤40,
第二行为n块银饰的重量,重量的取值范围为[1,2000],重量之间使用空格隔开
如果剩余两块,返回较大的重量(若两块重量相同,返回任意一块皆可)
如果只剩下一块,返回该块的重量;
如果没有剩下,就返回 0.
public class 剩余银饰的重量 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
PriorityQueue q = new PriorityQueue<>(Comparator.reverseOrder());
for (int i = 0; i < n; i++) {
int i1 = sc.nextInt();
q.add(i1);
}
while (q.size() >= 3){
int z = q.poll();
int y = q.poll();
int x = q.poll();
int res = getdeal(x, y, z);
if (res != 0){
q.add(res);
}
}
int ans = q.size() != 0 ? q.peek() : 0;
System.out.println(ans);
}
private static int getdeal(int x, int y, int z) {
int res = 0;
if (x == y && y == z){
res = 0;
}else if (x == y && y != z){
res = z - y;
}else if (x != y && y == z){
res = y -x;
}else {
res = Math.abs(z - y - y + x);
}
return res;
}
}