我有这个问题:
工匠奥拉夫制作并销售复杂的装饰品。最近,他一直在做一些小玩意儿给我
挂在圣诞树上。
小玩意有两种颜色:红色和蓝色。在他的工作室里,奥拉夫有红色的饰品和薄纱
蓝色饰品。此外,奥拉夫还有一些备用的未上漆的小玩意儿,他可以把这些小玩意儿变成他的小玩意儿
两种颜色都可以。奥拉夫不能把红色的饰物变成蓝色的饰物,反之亦然。
皇宫刚刚订购了RP红色饰品和BP蓝色饰品。
对奥拉夫来说不幸的是,地精王雇佣了你来阻止奥拉夫完成任务
这道菜!晚上,你会偷偷溜进奥拉夫的工作室,毁掉他的一些小玩意儿,所以
无论奥拉夫选择如何粉刷他多余的装饰品,他都无法完成订单。
Olaf可能随时醒来,因此您需要快速高效地工作。是什么
为了阻止Olaf履行此订单,您可以销毁的最小饰物数?\我将如何解决此问题
我试过: `
import sys
sys.setrecursionlimit(9999999)
import random
DEBUG = True
#----------------------------------------------------
fin = open('baublesin.txt', 'r')
fin = fin.read()
if DEBUG: print(fin)
fin = fin.split(' ')
red = int(fin[0])
if DEBUG: print(red)
blu = int(fin[1])
if DEBUG: print(blu)
spa = int(fin[2])
if DEBUG: print(spa)
ore = int(fin[3])
if DEBUG: print(ore)
obl = int(fin[4])
if DEBUG: print(obl)
total = red + blu + spa
if DEBUG: print(total)
#----------------------------------------------------
# red - red_broken + ore + spa < red
# blu - blu_broken + obl + spa < blu
#
def check():
if red - red_broken + ore + spa < red:
if blu - blu_broken + obl + spa < blu:
return True #if all the conditions are met, the problem is solved
if blu - blu_broken + obl + spa < blu:
if red - red_broken + ore + spa < red:
return True # ''
return False
red_broken = random.randrange(0, total, 1)
blu_broken = random.randrange(0, total, 1)
d = 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 #dont even question
a = 0
while a <= 300000: #should be enough
red_broken = random.randrange(0, total, 1)
blu_broken = random.randrange(0, total, 1)
if check():
if red_broken+blu_broken < d:
d = red_broken+blu_broken
a = a+1
#rn, the problem should be solved
print('done:')
print(d)
open('baublesout.txt', 'w').write(str(broken_red+broken_blu))
`
坦率地说,这更像是一个数学问题,而不是一个python问题(您似乎处理得非常低效)。让我们看看我们有什么信息-
你只需要检查一个边缘的情况(这样你就不会打破一个负数字的装饰品),这只是一个简洁的功能,可以完成工作。它的工作原理是计算每种颜色需要分配的最小数量的备用饰品,以找出要打碎的最小数量的饰品
相关问题 更多 >
编程相关推荐