蓝桥杯每日一练——买不到的数目(暴力破解) python

题目描述
小明开了一家糖果店。他别出心裁:把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖。
小朋友来买糖的时候,他就用这两种包装来组合。当然有些糖果数目是无法组合出来的,比如要买 10 颗糖。
你可以用计算机测试一下,在这种包装情况下,最大不能买到的数量是17。大于17的任何数字都可以用4和7组合出来。
本题的要求就是在已知两个包装的数量时,求最大不能组合出的数字。
输入
两个正整数,表示每种包装中糖的颗数(都不多于1000)
输出
一个正整数,表示最大不能买到的糖数
样例输入
4 7
样例输出
17

这道题其实是有公式可以计算的,但是对于我们这种不知道公式但又在赛场上遇见了这种题的选手,就比较难受,这个时候可以采用暴力破解!

a,b = map(int,input().split())
lists = []
lists1 = []
# 先把所有的组合可能都运行出来,放在lists列表中(这里只运行前1000个数)
for i in range(1000):
    for j in range(1000):
        lists.append(i*a+j*b)
lists.sort() # 对lists进行排序
# 因为这里到后面有可能会出现有一些数字没能取到(有可能它是1001*a+1*b),
#所以为了防止出现这样的事,只取前50000,我承认这波有点赌的成分,但是我赌对了
for i in range(1,50000): 
	# 如果这个数与前面的是相差不是1然后他跟前一个也不相同,那他就是内鬼,把他抓出来关进lists1
    if (lists[i] - 1) != lists[i-1] and lists[i] != lists[i-1]:
        lists1.append(lists[i]-1)
print(max(lists1))

最后放上这道题的公式解法

while True:
    try:
        a, b = map(int, input().split())
        print(a*b-a-b)
    except:
        break

具体为什么,可以看原博客

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Python的计算思维训练中,循环与列表是非常重要的一部分。循环是一种重复执行特定代码块的方式,而列表则是一种存储多个元素的数据结构。 循环可以帮助我们简化代码、减少重复性工作。在Python中,有两种常见的循环结构:for循环和while循环。for循环适用于已知循环次数的情况,而while循环适用于未知循环次数的情况。 列表是一种有序序列,可以用来存储多个元素。在Python中,列表用方括号([])表示,元素之间使用逗号(,)分隔。列表可以包含不同类型的元素,如整数、浮点数、字符串等。 循环与列表的结合应用让问题的解决更加高效。我们可以通过循环遍历列表中的每个元素,执行相同的操作或针对每个元素执行不同的操作。例如,我们可以使用循环来求列表中所有元素的和或平均值。同时,我们还可以在循环中使用条件语句对列表中的元素进行筛选和处理。 除了遍历列表,我们还可以使用循环来生成列表。通过循环的迭代,我们可以根据特定的规律生成一系列元素,并将它们存储到列表中。这在处理大量数据或自动生成一系列数值时非常有用。 总的来说,循环与列表是Python计算思维中非常重要的一部分。它们可以帮助我们解决各种问题,简化代码并提高效率。掌握循环与列表的使用方法,将会为我们的编程开发带来更多的便利和灵活性。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值