华为06年面试题,有两个长度一样列表a和b,它们里面的元素都是整形的数值, #要求:通过交换两个列表的元素,使得sum(a) 和 sum(b)的差值最小

  1. 有两个长度一样列表a和b,它们里面的元素都是整形的数值,要求:通过交换两个列表的元素,使得sum(a) 和 sum(b)的差值最小
    (华为06年面试题)
#2. 有两个长度一样列表a和b,它们里面的元素都是整形的数值,
#要求:通过交换两个列表的元素,使得sum(a) 和 sum(b)的差值最小
import math
li1 = [1,4,8,58,45,12,63,40,70] 
li2 = [2,3,0,7,49,62,33,78,960]


#交换两个变量的值
def exchange(a,b):
    c = a#把a的变量值存储到c中
    a = b#把b的值赋值给a
    b = c#把a存储在c中的值赋值给b
    return [a,b]


#处理两个列表,使两个列表差值最小
def a(li1,li2):
    if type(li1) == list and isinstance(li1,list) and len(li1) == len(li2):
        a1 =math.fabs(sum(li1)-sum(li2))
        #如果交换两个列表的值,使两个列表和的差变小,则交换,否则,不交换
        for i in range(len(li1)):
            for j in range(len(li2)):
                li1[i],li2[j] = li2[j],li1[i]#交换li1[i],li2[2]的值
                #如果交换之后两个列表和的差变小,更新两列表的差
                if math.fabs(sum(li1)-sum(li2)) < a1:
                    a1 =math.fabs(sum(li1)-sum(li2))
                else :#交换回来
                    li1[i],li2[j] = exchange(li1[i],li2[j])
        li1.sort()
        li2.sort()
        print(li1)
        print(li2)
        print('列表1的和:',sum(li1))
        print('列表2的和:',sum(li2))
        print('两列表和的差的绝对值:',math.fabs(sum(li1)-sum(li2)))
        return li1,li2
    else:
        print('输入参数有误,请重新输入')


li1,li2 = a(li1,li2)
print(li1)
print(li2)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sun614

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值