0
点赞
收藏
分享

微信扫一扫

【天线】1.四遥解释(我是引用别人的内容)

【华为OD】【统一考试C卷真题】100%通过:剩余银饰的重量  python 源码实现

目录

题目描述:

示例1

示例2

代码实现:


题目描述:

有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。

示例1

输入输出示例仅供调试,后台判题数据一般不包含示例

输入

输出

说明

选出1 1 1,得到 0,最终数组转换为 [],最后没有剩下银块,返回0

示例2

输入输出示例仅供调试,后台判题数据一般不包含示例

输入

输出

说明

代码实现:

if __name__ == '__main__':
    n = int(input())
    my_values = [int(i) for i in (input()).split()]
    if len(my_values) == 0:
        print(0)
    elif len(my_values) == 2:
        print(my_values[1]if my_values[0] < my_values[1] else my_values[0])
    elif len(my_values) == 1:
        print(my_values[0])
    else:
        while True:
            my_values.sort(reverse=True)
            a_list = []
            tmp = my_values[0:3]
            if tmp[0] == tmp[1] and tmp[1] == tmp[2]:
                pass;
            elif tmp[0] == tmp[1] and tmp[1] != tmp[2]:
                a_list.append(abs(tmp[2] - tmp[0]))
            elif tmp[0] != tmp[1] and tmp[1] == tmp[2]:
                a_list.append(abs(tmp[1] - tmp[0]))
            elif tmp[0] != tmp[1] and tmp[1] != tmp[2]:
                a_list.append(abs(abs(tmp[2] - tmp[1]) - abs(tmp[1] - tmp[0])))
            my_values = a_list + my_values[3:]
            if len(my_values) <= 2:
                break
        if len(my_values) == 0:
            print(0)
        elif len(my_values) == 2:
            print(my_values[1]if my_values[0] < my_values[1] else my_values[0])
        elif len(my_values) == 1:
            print(my_values[0])
举报

相关推荐

0 条评论