OD C卷 - 剩余银饰的重量
文章目录
- 剩余银饰的重量
剩余银饰的重量
- 有n块银饰,每块的重量都是正整数,收集到的银饰会被熔化用于打造新的饰品;
- 每一回合,从中选出三块最重的银饰,一起熔化;假设三块的重量分别为x、y、z且x<=y<=z,熔化可能结果如下:
- 若xyz,则三块都会被完全熔化;
- 若x==y且y!=z,则会剩余重为 z-y 的银块无法熔化;
- 若x!=y且y==z,会剩余 y-x 的银块无法熔化;
- 若 x!=y 且y!=z,则会剩余 (z-y) 与 (y-x)差值的银块无法熔化(差值结果为正整数);
- 最后若剩余两块,则返回较大的重量;若剩下一块,返回该块重量;若没有剩余则返回0
输入描述:
第一行输入银饰数组长度n,【1, 40】
第二行为银饰的重量
输出描述:
若剩余两块,则返回较大的重量;若剩下一块,返回该块重量;
若没有剩余则返回0
示例1
输入:
3
1 1 1
输出:
0
说明:
最后没有剩下银块,故返回0
示例2
输入:
3
3 7 10
输出:
1
说明:
选出3 7 10,需要计算(7-3)- (10-7)= 1,数组转为[1],剩余一块,返回1
思路:
简单的过程模拟
n = int(input().strip())
arr = list(map(int, input().strip().split()))while len(arr) >= 3:arr.sort()x = arr.pop(0)y = arr.pop(0)z = arr.pop(0)if x == y == z:continueelif x == y and y != z:arr.append(z-y)elif x != y and y == z:arr.append(y-x)elif x != y and y != z:arr.append(abs((z-y)-(y-x)))if len(arr) == 2:print(max(arr))
elif len(arr) == 1:print(arr[0])
elif not arr:print(0)