Coupez une tige de longueur n par m personnes pour faire des unités de 1 cm. Cependant, une seule personne peut couper à la fois. Combien d'étapes cela prendra-t-il?
Code La version que j'ai essayée sans penser à rien. La politique est "coupée du plus long"
def cutbar(length, member):
bar = [length]
step = 0
while bar != [1]*len(bar): #Fin si toute la longueur est 1
for i in range(min(member, len(bar))):
piece = bar.pop(0) #conduire(=Valeur maximum)Sortir
if piece == 1:
break
else:
cut1 = round(piece/2)
cut2 = piece - cut1
bar += [cut1, cut2]
bar.sort(reverse=True) #Trier par ordre décroissant
step += 1
return step
print(cutbar(20, 3))
print(cutbar(100, 5))
Il est plus intelligent de le faire de manière récursive. La plupart du code ci-dessous est en vente dans le texte, mais ...
#Q04 Découper un bâton
#Utiliser la récurrence
def cutbars(length, member, pieces): #Longueur initiale du bâton, nombre de personnes, nombre actuel de bâtons
if pieces >= length: #Coupe terminée
return 0
elif pieces < member: #Coupez tous les bâtons uniformément
return 1 + cutbars(length, member, pieces * 2)
else: #Ne coupez que les bâtons pour les membres
return 1 + cutbars(length, member, pieces + member)
print(cutbars(20, 3 ,1))
print(cutbars(100, 5, 1))
Recommended Posts