机考-最大消费金额

该问题是一个组合优化问题,目的是在给定资金限制下,找到三个商品使得总价格最大。程序通过生成所有可能的三商品组合,计算它们的和并排序,然后找出不超过购买资金的最大组合。当没有合适的组合时,返回-1。
摘要由CSDN通过智能技术生成

题目描述:

双十一众多商品进行打折销售,小明想购买自己心仪的一些物品,但由于受购买资金限制,所以他决定从众多心仪商品中购买三件,而且想尽可能的花完资金,现在请你设计一个程序帮助小明计算尽可能花费的最大资金数额

输入输出

输入描述:

输入第一行为一维整型数组M,数组长度小于100,数组元素记录单个商品的价格,单个商品价格小于1000。

输入第二行为购买资金的额度R,R小于100000。

输出描述:

输出为满足上述条件的最大花费额度。

注意:如果不存在满足上述条件的商品,请返回-1。

示例1

输入
23,26,36,27
78
输出
76
说明
金额23、26和27相加得到76,而且最接近且小于输入金额78

示例2

输入
28,51,49
27
输出
-1
说明
因为输入的商品,无法组合出来满足三件之和小于26.故返回-1
备注:
输入格式是正确的,无需考虑格式错误的情况

解答思路

通过遍历三个数值的组合,来判断最接近预期数值的组合;

def find_group(array_tmp, num_input):
    sum_list = []
    for tmp in itertools.combinations(map(int, array_tmp), 3):
        sum_list.append(sum(tmp))
    sum_list.sort()
    if sum_list[0] > num_input:
        return -1
    if sum_list[-1] <= num_input:
        return sum_list[-1]
    for i in range(len(sum_list)):
        if sum_list[i] > num_input:
            return sum_list[i - 1]
        else:
            continue


if __name__ == '__main__':
    list_input = ['23', '26', '27', '36']
    b = 76
    print(find_group(list_input, b))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值