Lighter or Heavier算法设计

来源:互联网 发布:charge是什么软件 编辑:程序博客网 时间:2024/06/05 07:02

问题:n个银币,n>2,其中有一个是假的,其他的真的重量完全相同,现在有一个天平,但是没有重量砝码,设计算法来得出假的银币是偏轻还是偏重?要求算法复杂度为o(1)。

我的思路:

1. 如果n为奇数,随机取出一个银币,将剩下的n-1个银币平均分为两份,

1a) 如果重量相同,将取出的银币替换两边任意一个,就可以得出结果;

1b) 如果重量不同,不失一般性,取重的一组,银币数量为(n-1)/2,

1aa)如果为奇数,随机取出一个,将剩下的(n-1)/2-1个均分,

如果重量相同,将取出一个替代两组中随意一个,

如果仍然相同,则假币偏轻;

如果不同,则假币偏重;

如果重量不同,则假币偏重;

1ab) 如果为偶数,均分成两份,

如果重量相同,则假币偏轻;

如果重量不同,则假币偏重;

2. 如果n为偶数,则均分为两份,重量必定不同,转到1b)


自己看了一遍应该没什么问题,去google看看

0 0