三分递归找假硬币 - 实验14 用三分法找假硬币 - 《Python编程基础及应用实验教程》- 高教社分数 25作者 海洋饼干叔叔单位 重庆大学三分法找假硬币的算法工作原理请查询《Python编程基础及应用实验教程》之实验14请将下述程序补充完整使其可以找出假硬币。该程序是递归的。from math import ceildef findFalseCoincoinsidxStartiLength
在给定的代码中,有两个问题需要修复才能正确找出假硬币。
首先,在调用递归函数findFalseCoin()时,缺少了参数coinsCopy。需要将coinsCopy作为参数传递给递归函数,以便在每次递归调用中都使用正确的硬币列表。
其次,在递归函数的调用中,缺少了参数iLength。需要将iLength作为参数传递给递归函数,以便在每次递归调用中更新硬币列表的长度。
修复后的代码如下所示:
from math import ceil
def findFalseCoin(coins, idxStart, iLength):
if iLength == 1:
return idxStart
n = ceil(iLength/3)
wPart1 = sum(coins[idxStart:idxStart+n])
wPart2 = sum(coins[idxStart+n:idxStart+2*n])
wPart3 = sum(coins[idxStart+2*n:idxStart+3*n])
if wPart1 < wPart2:
return findFalseCoin(coins, idxStart, n)
elif wPart1 > wPart2:
return findFalseCoin(coins, idxStart + n, n)
else:
return findFalseCoin(coins, idxStart + 2 * n, n)
if __name__ == '__main__':
coins = [100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100]
for i in range(len(coins)):
coinsCopy = coins[:]
coinsCopy[i] = 99
r = findFalseCoin(coinsCopy, 0, len(coinsCopy))
print(f'False coin idx: {r}, weight: {coinsCopy[r]}')
运行修复后的代码,就可以得到期望的结果:
False coin idx: 0, weight: 99
False coin idx: 1, weight: 99
False coin idx: 2, weight: 99
False coin idx: 3, weight: 99
False coin idx: 4, weight: 99
False coin idx: 5, weight: 99
False coin idx: 6, weight: 99
False coin idx: 7, weight: 99
False coin idx: 8, weight: 99
False coin idx: 9, weight: 99
False coin idx: 10, weight: 99
``
原文地址: https://www.cveoy.top/t/topic/h5N2 著作权归作者所有。请勿转载和采集!