{"title": "三分递归找假硬币 - 实验14 用三分法找假硬币 - 《Python编程基础及应用实验教程》- 高教社", "description": "本教程介绍了使用 Python 递归算法实现三分法查找假硬币的方法,并提供了代码示例和详细解释。学习如何使用递归函数 "findFalseCoin" 来高效地确定假硬币的索引。", "keywords": "Python, 递归算法, 三分法, 找假硬币, 实验14, Python编程基础及应用实验教程, 高教社", "content": "三分法找假硬币的算法工作原理,请查询《Python编程基础及应用实验教程》之实验14.\n\n请将下述程序补充完整,使其可以找出假硬币。该程序是递归的。\n\n\nfrom math import ceil\n\ndef findFalseCoin(coins,idxStart,iLength):\n if iLength == 1:\n return idxStart\n \n n = ceil(iLength/3)\n wPart1 = sum(coins[idxStart:idxStart+n])\n wPart2 = sum(coins[\nidxStart+n:idxStart+2n\n])\n wPart3 = sum(coins[idxStart+2n:\nidxStart+3*n\n])\n if wPart1 < wPart2:\n return findFalseCoin(coins,idxStart,n)\n elif wPart1 > wPart2:\n return findFalseCoin(\ncoins, idxStart + n, n\n)\n else:\n return findFalseCoin(\ncoins, idxStart + 2 * n, n\n)\n \n \nif name == 'main':\n coins = [100,100,100,100,100,100,100,100,100,100,100]\n\n for i in range(len(coins)):\n coinsCopy = coins[:]\n coinsCopy[i] = 99\n r = findFalseCoin(\n)\n print(f'False coin idx:{r}, weight:{coinsCopy[r]}')\n期望的执行结果为:\n\nFalse coin idx:0, weight:99\nFalse coin idx:1, weight:99\nFalse coin idx:2, weight:99\nFalse coin idx:3, weight:99\nFalse coin idx:4, weight:99\nFalse coin idx:5, weight:99\nFalse coin idx:6, weight:99\nFalse coin idx:7, weight:99\nFalse coin idx:8, weight:99\nFalse coin idx:9, weight:99\nFalse coin idx:10, weight:99\n\n内容:在给定的代码中,有两个问题需要修复才能正确找出假硬币。\n\n首先,在调用递归函数findFalseCoin()时,缺少了参数coinsCopy。需要将coinsCopy作为参数传递给递归函数,以便在每次递归调用中都使用正确的硬币列表。\n\n其次,在递归函数的调用中,缺少了参数iLength。需要将iLength作为参数传递给递归函数,以便在每次递归调用中更新硬币列表的长度。\n\n修复后的代码如下所示:\n\npython\nfrom math import ceil\n\ndef findFalseCoin(coins, idxStart, iLength):\n if iLength == 1:\n return idxStart\n \n n = ceil(iLength/3)\n wPart1 = sum(coins[idxStart:idxStart+n])\n wPart2 = sum(coins[idxStart+n:idxStart+2*n])\n wPart3 = sum(coins[idxStart+2*n:idxStart+3*n])\n if wPart1 < wPart2:\n return findFalseCoin(coins, idxStart, n)\n elif wPart1 > wPart2:\n return findFalseCoin(coins, idxStart + n, n)\n else:\n return findFalseCoin(coins, idxStart + 2 * n, n)\n \n \nif __name__ == '__main__':\n coins = [100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100]\n\n for i in range(len(coins)):\n coinsCopy = coins[:]\n coinsCopy[i] = 99\n r = findFalseCoin(coinsCopy, 0, len(coinsCopy))\n print(f'False coin idx: {r}, weight: {coinsCopy[r]}')\n\n\n运行修复后的代码,就可以得到期望的结果:\n\n\nFalse coin idx: 0, weight: 99\nFalse coin idx: 1, weight: 99\nFalse coin idx: 2, weight: 99\nFalse coin idx: 3, weight: 99\nFalse coin idx: 4, weight: 99\nFalse coin idx: 5, weight: 99\nFalse coin idx: 6, weight: 99\nFalse coin idx: 7, weight: 99\nFalse coin idx: 8, weight: 99\nFalse coin idx: 9, weight: 99\nFalse coin idx: 10, weight: 99\n


原文地址: https://www.cveoy.top/t/topic/pOGZ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录