是个栋梁 2024-10-03 13:57 采纳率: 100%
浏览 12
已结题

Python 蓝桥杯练习题完善

【题目描述】
蓝宝作为班长,现在要为同学们采购文具。文具单价为:笔记本7元;笔4元;橡皮3元。
蓝宝手里有n元班费,假如笔记本、笔、橡皮的订购数量分别为a,b,c。他采购的原则依次如下:

  1. n元班费必须正好用完,即7a+4b+3c=n.
  2. 在满足以上条件情况下,成套的数量尽可能大,即a,b,c中的最小值尽可能大。
  3. 在满足以上条件的情况下,物品的总数尽可能大,即a+b+c尽可能大。
    请帮助蓝宝找到满足条件的最优方案。(说明:若存在方案,则最优方案唯一。)
    【输入格式】输入一行,为一个整数,代表班费数量n。
    【输出格式】输出一行。如果问题无解,请输出-1。否则输出a,b,c用空格隔开。

【输入样例1】34
【输出样例1】2 2 4
【输入样例2】18
【输出样例2】1 2 1
【输入样例3】2
【输出样例3】-1

n=int(input())
lst1=[]
lst2=[]
lst3=[]
y=0
#满足条件一
for a in range(1,n+1):
    for b in range(1,n+1):
        for c in range(1,n+1):
            if c==(n-7*a-4*b)/3:
                lst1.append(a)
                lst2.append(b)
                lst3.append(c)
#满足条件二
lst4=[]
for i in range(len(lst1)):
    lst=[lst1[i],lst2[i],lst3[i]]
    x=min(lst)
    if x>y:
        y=x
        lst4=lst
#输出
if lst4 != []:
    for i in lst4:
        print(i,end=' ')
else:
    print(-1)


代码能够输出样例,但感觉还不够完善,对于是否满足条件三不知道怎么判断

  • 写回答

1条回答 默认 最新

  • Roc-xb 后端领域优质创作者 2024-10-03 15:01
    关注
    
    def find_optimal_combination(n):
        max_min_value = -1
        max_total_items = -1
        best_combination = (-1, -1, -1)
    
        # Iterate over possible values of a
        for a in range(n // 7 + 1):
            # Iterate over possible values of b
            for b in range((n - 7 * a) // 4 + 1):
                # Calculate c based on a and b
                remaining = n - 7 * a - 4 * b
                if remaining % 3 == 0:
                    c = remaining // 3
                    min_value = min(a, b, c)
                    total_items = a + b + c
                    
                    # Check if this combination is better
                    if (min_value > max_min_value) or (
                        min_value == max_min_value and total_items > max_total_items):
                        max_min_value = min_value
                        max_total_items = total_items
                        best_combination = (a, b, c)
    
        # If no valid combination was found, return -1
        if best_combination == (-1, -1, -1):
            return -1
        else:
            return best_combination
    
    # Example usage
    n = int(input().strip())
    result = find_optimal_combination(n)
    if result == -1:
        print(result)
    else:
        print(*result)
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 今天
  • 已采纳回答 10月4日
  • 创建了问题 10月3日

悬赏问题

  • ¥15 java代码写在记事本上后在cmd上运行时无报错但又没生成文件
  • ¥15 关于#python#的问题:在跑ldsc数据整理的时候一直抱这种错误,要么--out识别不了参数,要么--merge-alleles识别不了参数(操作系统-linux)
  • ¥15 PPOCRLabel
  • ¥15 混合键合键合机对准标识
  • ¥100 现在不懂的是如何将当前的相机中的照片,作为纹理贴图,映射到扫描出的模型上
  • ¥15 魔霸ROG7 pro,win11.息屏后会显示黑屏,如图,如何解决?(关键词-重新启动)
  • ¥15 有没有人知道这是哪里出了问题啊?要怎么改呀?
  • ¥200 C++表格文件处理-悬赏
  • ¥15 Windows Server2016本地登录失败
  • ¥15 复合卡卡号轨道写入芯片卡