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
广告