我该如何解决这个问题?

2024-06-11 12:09:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个问题:
工匠奥拉夫制作并销售复杂的装饰品。最近,他一直在做一些小玩意儿给我 挂在圣诞树上。 小玩意有两种颜色:红色和蓝色。在他的工作室里,奥拉夫有红色的饰品和薄纱 蓝色饰品。此外,奥拉夫还有一些备用的未上漆的小玩意儿,他可以把这些小玩意儿变成他的小玩意儿 两种颜色都可以。奥拉夫不能把红色的饰物变成蓝色的饰物,反之亦然。 皇宫刚刚订购了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))

`


Tags: debugifrandomredinttotalprintspa
1条回答
网友
1楼 · 发布于 2024-06-11 12:09:32

坦率地说,这更像是一个数学问题,而不是一个python问题(您似乎处理得非常低效)。让我们看看我们有什么信息-

  • 红色饰品
  • 博蓝饰品
  • S备用的小玩意儿
  • RP要求的红色饰品
  • RB要求蓝色饰品

你只需要检查一个边缘的情况(这样你就不会打破一个负数字的装饰品),这只是一个简洁的功能,可以完成工作。它的工作原理是计算每种颜色需要分配的最小数量的备用饰品,以找出要打碎的最小数量的饰品

def CalculateMinimumBroken(RO, BO, S, RP, BP):
    if max((RP - RO),0) + max((BP - BO),0) > S:
        return 0
    if RO > RP and BO > BP:
        return(S + min((RO-RP),(BO-BP)) + 1)

    return(S - max(0,(RP - RO)) - max(0,(BP - BO)) + 1)

相关问题 更多 >