1000개의 양동이가 있고 그 중 하나는 유독하고 나머지는 물로 채워져 있다고 가정합니다. 모두 비슷해 보입니다. 돼지가 독을 마시면 15분 안에 죽습니다. 1시간 안에 독통을 찾기 위해 필요한 최소 돼지의 양은 얼마입니까?
이제 일반적인 경우를 고려하고 이에 대한 알고리즘을 고안하십시오. 따라서 일반적인 경우는 n개의 서로 다른 양동이가 있고 독을 마시는 돼지가 m분 이내에 죽는다면 p분 내에 독이 있는 양동이를 찾기 위해 몇 마리의 돼지가 필요합니까? 독이 있는 양동이가 정확히 하나 있습니다.
n =1000, m =15 및 p =60일 때 출력은 5가 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- ret :=0
- while (minutesToTest / minutesToDie + 1)^ret <버킷, do −
- (ret 1 증가)
- 반환
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
#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