螺母和螺栓问题的调试python代码

2024-03-28 19:26:21 发布

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

我试图编写代码来解决Nuts&;使用快速排序(?)可以解决此问题,但效果不佳。对我来说,最令人困惑的部分是递归的返回点。我如何修改它?有没有关于递归返回点的建议

坚果及;螺栓问题: 给定一组不同尺寸的n个螺母和n个不同尺寸的螺栓。螺母和螺栓之间存在一一对应关系。有效地匹配螺母和螺栓。 约束:不允许将一个螺母与另一个螺母或螺栓与另一个螺栓进行比较。这意味着螺母只能与螺栓进行比较,螺栓只能与螺母进行比较,以确定哪个更大/更小。 问这个问题的另一种方式是,给定一个带锁和钥匙的盒子,盒子里的一把钥匙可以打开一把锁。我们需要配对

def smallerThanPartition(nuts, p):
    lowN = []
    for i in range(0, len(nuts)):
        if p > nuts[i]:
            lowN.append(nuts[i])
    return lowN

def largerThanPartition(nuts, p):
    highN = []
    for i in range(0, len(nuts)):
        if p < nuts[i]:
            highN.append(nuts[i])
    return highN

def ALG5(nuts, bolts, partition):
    if(len(bolts) <= 1):
        print('nuts + bolts = '+ str(nuts + bolts))
        return nuts + bolts
    else:
        lowB = []
        highB = []
        a = []
        b = []
        lowN = []
        highN = []
        for i in range(0, len(nuts)):
            if nuts[partition] > bolts[i]:
                lowB.append(bolts[i])
                lowN = smallerThanPartition(nuts, nuts[partition])
            else:
                highB.append(bolts[i])
                highN = largerThanPartition(nuts, nuts[partition])

        a = ALG5(lowN, lowB, len(lowN) / 2)
        b = ALG5(highN, highB, len(highN) / 2)
        return a + nuts[partition] + b

if __name__ == "__main__":

    nuts = [1, 3, 5, 2, 44, 6]
    bolts = [5, 2, 6, 44, 1, 3]
    n = len(nuts)
    partition = n / 2
    print(ALG5(nuts, bolts, partition))

上述代码的结果是

[1, 1, 2, 3, 2, 5, 5, 6, 44, 44]
[1, 3, 5, 2, 44, 6]
[5, 2, 6, 44, 1, 3]

理想的结果是

[1, 2, 3, 5, 6, 44]
[1, 3, 5, 2, 44, 6]
[5, 2, 6, 44, 1, 3]

Tags: inforlenreturnifdefnutspartition