12个球一个天平,现知道只有一个和其它的重量不同,问怎样称才能用三次就找到那个球。...

http://blog.csdn.net/jemmy/article/details/481881

12个球一个天平,现知道只有一个和其它的重量不同,问怎样称才能用三次就找到那个球。

1,天平一边放四个,平则坏球在余下的四个里,好办。 不平,先将偏重的四个编号为:1、2、3、4。偏轻的编为A、B、C、D(因为不知道轻重)。

2。天平一边放三个,比如:左边放1、2、A。右边放3、4、B。 平则坏球是C、D 里偏轻的,不平则根据轻重淘汰1、2、B或 3、4、A

 

13个球一个天平,现知道只有一个和其它的重量不同,问怎样称才能用三次就找到那个球。

http://blog.csdn.net/wangyangkobe/article/details/6837406

4--4称一次,如果平衡,就在另5个中,拿3个正常的与5个中的三个对比,如果相等,在剩余两个中,拿正常的一个与剩余2个中一个对比,出结果,如果上次,3v3不相等那么知道到球是轻还是重,取不正常的3个中的2个1v1,得结果。

如果 4v4不相等

取正常的(5个中取)3个放入左天平,把左天平3个放入右天平,右天平取出3个,

如果相等,必在从右天平取出的3个中,且知是重还是轻,从中取2,进行1v1得结果,


如果不相等,天平的偏重方向未发生改变,说明必在 4v4时未被移动的两个球,左右一个,取一个正常的与其中一个对比得结果

如果不相等,天平偏重发生改变,必在从左天平移动到右天平那三个球中,且知球的是偏重还是篇轻,去其中2个1v1得结果

不会超过3次,不管哪种情况

转载于:https://www.cnblogs.com/growup/archive/2012/04/07/2435669.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个题可以用天平分治法来解决,具体步骤如下: 1. 将铅分成三组,每组放在天平两端进行量,找出重量较轻的一组。 2. 将较轻的一组铅继续分成三组,每组放在天平两端进行量,找出重量较轻的一组。 3. 将重量较轻的那组铅继续分成三组,每组放在天平两端进行量,找出重量较轻的一组。 4. 在剩下的那组铅中就只有一个了,它就是三次量中被出来的轻的那个铅。 下面是用 C 语言实这个算法的代码: ```c #include <stdio.h> int findFakeBall(int balls[], int start, int end) { if (start >= end) { return start; } int groupSize = (end - start + 1) / 3; int left = start, right = end; while (left < right) { int mid = (left + right) / 2; int sumLeft = 0, sumRight = 0; for (int i = left; i <= mid; i++) { sumLeft += balls[i]; } for (int i = mid + 1; i <= right; i++) { sumRight += balls[i]; } if (sumLeft < sumRight) { right = mid; } else { left = mid + 1; } } return findFakeBall(balls, start + groupSize, start + groupSize * 2 - 1); } int main() { int balls[] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 0}; int fakeBallIndex = findFakeBall(balls, 0, 9); printf("The fake ball is at index %d.\n", fakeBallIndex); return 0; } ``` 在这个代码中,findFakeBall 函数接收一个整型数组和两个整数参数 start 和 end,表示要在数组的 start 到 end 范围内查找假的索引。函数首先计算出每组铅的大小 groupSize,然后不断进行二分查找,将铅分成左右两组,并且计算出它们的重量。如果左侧的铅更轻,则继续在左侧进行查找;否则继续在右侧进行查找。最终,当只剩下一个时,它就是假的索引。 在上面的代码中,我们假定假重量是 0,而其他铅重量是 1。这样,我们只需要比较铅的数量,而不需要比较它们的重量。实际上,我们也可以假定假重量是任何一个不同于其他铅的值,然后通过比较重量找到

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值