蓝桥杯之枚举

发布于:2025-02-23 ⋅ 阅读:(17) ⋅ 点赞:(0)

1.题目

在这里插入图片描述

2.代码

# @File: 11.买铅笔.py
# @Author: chen_song
# @Time: 2025-02-22 11:42
from operator import index

def bubbleSort(arr):
  for i in range(len(arr)):
    for j in range(i+1,len(result)):
      if result[i]>result[j]:
        result[i],result[j] = result[j],result[i]
  return arr
# 获取三种情形
def getTreeCase(target,num1,num2,num3):
  if num1+num2 > target:
    return 1,1,0
  elif num1+num3 > target:
    return 1,0,1
  elif num2+num3 > target:
    return 0,1,1
  else:
    # 获取最大值
    list = [num1,num2,num3]
    # 系数矩阵
    coefficient = [0,0,0]
    maxIndex = list.index(max(list))
    coefficient[maxIndex]= target // max(list)
    minIndex = list.index(min(list))
    # 获取不在最大最小值区间的索引
    middleIndex = [i for i in range(3) if i not in [maxIndex,minIndex]][0]
    coefficient[middleIndex] = target % max(list)//list[middleIndex]
    coefficient[minIndex] = target % max(list)%list[middleIndex]//min(list) if (target % max(list)%list[middleIndex]//min(list))==0 else (target % max(list)%list[middleIndex]//min(list)+1)
    return coefficient

# 计算所有可能得情形
def getNeededNum(target, num1, num2):
 result1 = result2 = 0
 if num1 == 0:
  result2 = target // num2 if target % num2 == 0 else target // num2 + 1
  result1 = 0
 if num2 == 0:
  result1 = target // num1 if target % num1 == 0 else target // num1 +1
  result2 = 0
 if num1 != 0 and num2 != 0:
  if num1 >= num2 :
    result1 = target // num1
    result2 = target % num1 // num2 if (target % num1 % num2) == 0 else (target % num1 // num2 + 1)

  if num1 < num2:
    result2 = target // num2
    result1 = target % num2 // num1 if (target % num2 // num1) == 0 else (target % num2 // num1 + 1)
 return result1, result2


# 获取需要购买的铅笔总数
target = int(input())
#获取每一组SKU
good1 = list(map(int, input().split(' ')))
good2 = list(map(int, input().split(' ')))
good3 = list(map(int, input().split(' ')))

arr = [good1,good2,good3]
# 枚举各种可能情况--因为这个包装只有3类,所以刚好使用枚举,得到各种情况

# 获取价格列表的价格===直接返回最小价格
def getPrice(arr,targetNum):
 result = []
 for i in range(len(arr)):
   if arr[i][0]== targetNum:
     result.append(arr[i][1])
 bubbleSort(result)
 return result[0]
# 获取对应的各个包装的数量以及价格信息
num1 = arr[0][0]
price1 = arr[0][1]
num2 = arr[1][0]
price2 = arr[1][1]
num3 = arr[2][0]
price3 = arr[2][1]

goodAndPrice = arr
numList = [num1,num2,num3]
mixList = [[num1,num2],[num1,num3],[num2,num3]]
threeList = [[num1,num2,num3]]
result = []
# 计算各种排列组合情形
# 单个价格

for ele in numList:

  res = []
  # 第二个参数没有
  result1,result2 = getNeededNum(target,ele,0)
 # 计算这种情形对应的价格

  price = getPrice(goodAndPrice,ele)
  res.append(result1*price)
  # 第一个参数没有
  # result1,result2 = getNeededNum(target,0,ele)
 # 计算这种情形对应的价格
  result.append(*res)

# for ele in mixList:
#   res = []
#   result1, result2 = getNeededNum(target, ele[0], ele[1])
#   # 计算这种情形对应的价格
#   price1 = goodAndPrice[ele[0]]
#   price2 = goodAndPrice[ele[1]]
#   res.append(result1 * price1 + result2 * price2)
#   # result1, result2 = getNeededNum(target, ele[0], ele[1])
#   # 计算这种情形对应的价格
#   result.append(*res)
#
# for ele in threeList:
#   res = []
#   result1,result2,result3 = getTreeCase(target,ele[0],ele[1],ele[2])
#   res.append(result1*price1+result2*price2+result3*price3)
#   result.append(*res)

# print(result)
bubbleSort(result)


print(result[0])
# print(min([i for i in result]))