帮我写一份代码:有N个外表相同的球,其中有一个坏球,它的重量和其它N-1个不同,但不知道是偏轻还是偏重。现在有一架没有砝码的很灵敏的天平,问至少几次才能找出那个坏球,并知道它比标准球重还是轻。 【输入形式】球的个数N(小于50000个) 【输出形式】需要的称量次数K 【样例输入】119 【样例输出】5
时间: 2023-03-30 13:01:22 浏览: 143
12个外观一样的球,其中一个不一样,不知轻重?用天平称三次,找出异球。
这是一个经典的谜题,需要使用二分法来解决。首先将球分成三组,每组数量相等,然后将其中两组放在天平两端,如果天平平衡,则坏球在第三组中,否则坏球在天平较轻的一组中。接着将第三组分成三个等份,重复上述步骤,直到找到坏球。
因为每次都是将球分成三组,所以可以用三叉树来表示,每个节点表示一次称量,左子树表示天平左边较轻,右子树表示天平右边较轻,中间子树表示天平平衡。因为每次都是将球分成三组,所以树的高度为log3(N),所以需要称量的次数为log3(N)+1。
因此,代码如下:
#include <stdio.h>
#include <math.h>
int main()
{
int N, K;
scanf("%d", &N);
K = log(N-1)/log(3) + 1;
printf("%d\n", K);
return ;
}
阅读全文