题目描述
小明开了一家糖果店。他别出心裁:把水果糖包成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