鱼C论坛

 找回密码
 立即注册
查看: 5959|回复: 33

[技术交流] 小练习20160201:称量乒乓球

[复制链接]
发表于 2016-2-5 13:36:54 | 显示全部楼层

回帖奖励 +3 鱼币

  1. import random


  2. def find(num1, num2, output=False):

  3.     # 初始化。
  4.     all_nums = ['0' for i in range(num1)]
  5.     all_nums[num2-1] = '00'
  6.     result = []

  7.     # 称量。
  8.     def calc(all_nums=all_nums, time=0):
  9.         # 取标志单双。
  10.         length = len(all_nums)
  11.         flag = length % 2
  12.         if length == 2 or length == 3:
  13.             print("{0}次称量得出结果。".format(time+1))
  14.             result.append(time+1)
  15.             return
  16.         # 双数。
  17.         if not flag:
  18.             half = length / 2
  19.             half = int(half)
  20.             # 比较大小。
  21.             if len(''.join(all_nums[:half])) > len(''.join(all_nums[half:])):
  22.                 if output:
  23.                     print('{0}次称量,称量剩余的{1}-{2}球和{3}-{4}球,重量不同,继续称量。 '.format(time+1, 1, half, half+1, length))
  24.                 calc(all_nums=all_nums[:half], time=time+1)
  25.             else:
  26.                 if output:
  27.                     print('{0}次称量,称量剩余的{1}-{2}球和{3}-{4}球,重量不同,继续称量。 '.format(time+1, 1, half, half+1, length))
  28.                 calc(all_nums=all_nums[half:], time=time+1)
  29.         # 单数。
  30.         else:
  31.             half = (length-1) / 2
  32.             half = int(half)
  33.             # 比较大小。
  34.             if len(''.join(all_nums[:half])) > len(''.join(all_nums[half:-1])):
  35.                 if output:
  36.                     print('{0}次称量,称量剩余的{1}-{2}球和{3}-{4}球,重量不同,继续称量。 '.format(time+1, 1, half, half+1, length))
  37.                 calc(all_nums=all_nums[:half], time=time+1)
  38.             elif len(''.join(all_nums[:half])) < len(''.join(all_nums[half:-1])):
  39.                 if output:
  40.                     print('{0}次称量,称量剩余的{1}-{2}球和{3}-{4}球,重量不同,继续称量。 '.format(time+1, 1, half, half+1, length))
  41.                 calc(all_nums=all_nums[half:-1], time=time+1)
  42.             else:
  43.                 print('{0}次称量,称量剩余的{1}-{2}球和{3}-{4}球,重量相同 '.format(time+1, half, length, half+1, length))
  44.                 result.append(time+1)
  45.                 return
  46.     calc()
  47.     return result[0]
复制代码


写完才发现二分法是次优解,占坑待编辑。

评分

参与人数 1荣誉 +10 鱼币 +10 收起 理由
冬雪雪冬 + 10 + 10 热爱鱼C^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-3 05:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表