C++ 中的猪圈问题


假设有 1000 个水桶,其中一个装有毒药,其他的装满了水。它们看起来都一样。如果猪喝了毒药,它会在 15 分钟内死亡。我们需要至少多少头猪才能在一小时内找出有毒的水桶?

现在考虑一般情况并为此设计一个算法。一般情况是,如果有 n 个不同的水桶,并且猪喝了毒药会在 m 分钟内死亡,那么在 p 分钟内找到有毒水桶需要多少头猪?只有一个水桶有毒。

当 n = 1000,m = 15 且 p = 60 时,输出将为 5。

为了解决这个问题,我们将遵循以下步骤 -

  • ret := 0
  • 当 (测试时间 / 致死时间 + 1)^ret < 水桶数量 时,执行 -
    • (ret 加 1)
  • 返回 ret

让我们看看以下实现以更好地理解 -

示例

 在线演示

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int poorPigs(int buckets, int minutesToDie, int minutesToTest) {
      int ret = 0;
      while(pow((minutesToTest / minutesToDie + 1), ret) < buckets) ret++;
      return ret;
   }
};
main(){
   Solution ob;
   cout << (ob.poorPigs(1000,15,60));
}

输入

1000
15
60

输出

5

更新于: 2020-06-01

164 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告