|
发表于 2016-2-5 13:36:54
|
显示全部楼层
回帖奖励 +3 鱼币
- import random
- def find(num1, num2, output=False):
- # 初始化。
- all_nums = ['0' for i in range(num1)]
- all_nums[num2-1] = '00'
- result = []
- # 称量。
- def calc(all_nums=all_nums, time=0):
- # 取标志单双。
- length = len(all_nums)
- flag = length % 2
- if length == 2 or length == 3:
- print("{0}次称量得出结果。".format(time+1))
- result.append(time+1)
- return
- # 双数。
- if not flag:
- half = length / 2
- half = int(half)
- # 比较大小。
- if len(''.join(all_nums[:half])) > len(''.join(all_nums[half:])):
- if output:
- print('{0}次称量,称量剩余的{1}-{2}球和{3}-{4}球,重量不同,继续称量。 '.format(time+1, 1, half, half+1, length))
- calc(all_nums=all_nums[:half], time=time+1)
- else:
- if output:
- print('{0}次称量,称量剩余的{1}-{2}球和{3}-{4}球,重量不同,继续称量。 '.format(time+1, 1, half, half+1, length))
- calc(all_nums=all_nums[half:], time=time+1)
- # 单数。
- else:
- half = (length-1) / 2
- half = int(half)
- # 比较大小。
- if len(''.join(all_nums[:half])) > len(''.join(all_nums[half:-1])):
- if output:
- print('{0}次称量,称量剩余的{1}-{2}球和{3}-{4}球,重量不同,继续称量。 '.format(time+1, 1, half, half+1, length))
- calc(all_nums=all_nums[:half], time=time+1)
- elif len(''.join(all_nums[:half])) < len(''.join(all_nums[half:-1])):
- if output:
- print('{0}次称量,称量剩余的{1}-{2}球和{3}-{4}球,重量不同,继续称量。 '.format(time+1, 1, half, half+1, length))
- calc(all_nums=all_nums[half:-1], time=time+1)
- else:
- print('{0}次称量,称量剩余的{1}-{2}球和{3}-{4}球,重量相同 '.format(time+1, half, length, half+1, length))
- result.append(time+1)
- return
- calc()
- return result[0]
复制代码
写完才发现二分法是次优解,占坑待编辑。 |
评分
-
查看全部评分
|