编写代码找出铁条的最大切割量
Write code that find maximum cuts of an iron bar
我目前正在尝试编写一个 Python 程序,它可以找到 5m 铁棒的最大切割量。
允许的切口为:0.5m、1m、1.2m 和 2m。
鉴于我必须找到所有匹配或接近 5m 的组合。
组合示例:
- 10*0.5 = 5m
- 7*0.5 + 1.2 = 4.7m
第二个组合也不错,因为不能切出0.3m,就扔掉了。
组合剂量内的顺序很重要,
7x0.5 + 1.2 = 1.2 + 7x0.5
所以我们只需要计算一次。
所以理想情况下,我的程序接收一个文件,然后编写一个包含所有组合的文件,如:
c1 = 10*0.5
c2 = 7*0.5 + 1.2
....
任何人都可以分享从哪里开始的建议吗?谢谢。
也许这就是您要找的东西?
x = [2, 1.2, 1, 0.5]
max_val = 5
def find_next(state, idx, check=False):
if(idx == len(x)):
return print_it(state, check)
if(sum(state) + x[idx] > max_val):
find_next(state, idx + 1, True)
else:
find_next(state + [x[idx]], idx)
find_next(state, idx + 1)
def print_it(state, check):
if check:
print("")
print(sum(state),state)
return
find_next([],0)
它递归地寻找下一个值,直到它用完所有值,并使用一个简单的列表跟踪当前状态,该列表使用 print_it
函数打印。我将把格式化和文件存储留给你,这可以很容易地在那个函数中实现。
我目前正在尝试编写一个 Python 程序,它可以找到 5m 铁棒的最大切割量。 允许的切口为:0.5m、1m、1.2m 和 2m。 鉴于我必须找到所有匹配或接近 5m 的组合。 组合示例:
- 10*0.5 = 5m
- 7*0.5 + 1.2 = 4.7m
第二个组合也不错,因为不能切出0.3m,就扔掉了。 组合剂量内的顺序很重要,
7x0.5 + 1.2 = 1.2 + 7x0.5
所以我们只需要计算一次。 所以理想情况下,我的程序接收一个文件,然后编写一个包含所有组合的文件,如:
c1 = 10*0.5
c2 = 7*0.5 + 1.2
....
任何人都可以分享从哪里开始的建议吗?谢谢。
也许这就是您要找的东西?
x = [2, 1.2, 1, 0.5]
max_val = 5
def find_next(state, idx, check=False):
if(idx == len(x)):
return print_it(state, check)
if(sum(state) + x[idx] > max_val):
find_next(state, idx + 1, True)
else:
find_next(state + [x[idx]], idx)
find_next(state, idx + 1)
def print_it(state, check):
if check:
print("")
print(sum(state),state)
return
find_next([],0)
它递归地寻找下一个值,直到它用完所有值,并使用一个简单的列表跟踪当前状态,该列表使用 print_it
函数打印。我将把格式化和文件存储留给你,这可以很容易地在那个函数中实现。