Rat and Poisoned bottle Problem - GeeksforGeeks

06 Jun, 2021
Given N number of bottles in which one bottle is poisoned. So the task is to find out minimum number of rats required to identify the poisoned bottle. A rat can drink any number of bottles at a time. 
Examples: 
Input: N = 4 
Output: 2

Input: N = 100
Output: 7
Approach: Let’s start from the base case. 
For 2 bottles: Taking one rat (R1). If the rat R1 drinks the bottle 1 and dies, then bottle 1 is poisonous. Else the bottle 2 is poisonous. Hence 1 rat is enough to identify
For 3 bottles: Taking two rats (R1) and (R2). If the rat R1 drinks the bottle 1 and bottle 3 and dies, then bottle 1 or bottle 3 is poisonous. So the rat R2 drinks the bottle 1 then. If it dies, then the bottle 1 is poisonous, Else the bottle 3 is poisonous. Now if the rat R1 does not die after drinking from bottle 1 and bottle 3, then bottle 2 is poisonous. Hence 2 rats are enough to identify.  
For 4 bottles: Taking two rats (R1) and (R2). If the rat R1 drinks the bottle 1 and bottle 3 and dies, then bottle 1 or bottle 3 is poisonous. So the rat R2 drinks the bottle 1 then. If it dies, then the bottle 1 is poisonous, Else the bottle 3 is poisonous. Now if the rat R1 does not die after drinking from bottle 1 and bottle 3, then bottle 2 or bottle 4 is poisonous. So the rat R1 drinks the bottle 2 then. If it dies, then the bottle 2 is poisonous, Else the bottle 4 is poisonous. Hence 2 rats are enough to identify.  
For N bottles: 
Minimum number of rats required are = ceil(log2 N)) 
Below is the implementation of the above approach:  
C++
Java
Python3
C#
Javascript
// C++ program to implement// the above approach #include <bits/stdc++.h>using namespace std; // Function to find the minimum number of ratsint minRats(int n){    return ceil(log2(n));} // Driver Codeint main(){    // Number of bottles    int n = 1025;     cout << "Minimum " << minRats(n)         << " rat(s) are required"         << endl;     return 0;}
// Java program to implement// the above approachclass GFG{    public static double log2(int x)    {        return (Math.log(x) / Math.log(2));    }     // Function to find the minimum number of rats    static int minRats(int n)    {        return (int)(Math.floor(log2(n)) + 1);    }         // Driver Code    public static void main (String[] args)    {        // Number of bottles        int n = 1025;             System.out.println("Minimum " + minRats(n) +                           " rat(s) are required");    }   } // This code is contributed by AnkitRai01
# Python3 program to implement# the above approachimport math # Function to find the# minimum number of ratsdef minRats(n):         return math.ceil(math.log2(n)); # Driver Code # Number of bottlesn = 1025;print("Minimum ", end = "")print(minRats(n), end = " ")print("rat(s) are required") # This code is contributed# by divyamohan123
// C# program to implement// the above approachusing System; class GFG{    public static double log2(int x)    {        return (Math.Log(x) / Math.Log(2));    }     // Function to find the minimum number of rats    static int minRats(int n)    {        return (int)(Math.Floor(log2(n)) + 1);    }         // Driver Code    public static void Main (String[] args)    {        // Number of bottles        int n = 1025;             Console.WriteLine("Minimum " + minRats(n) +                          " rat(s) are required");    }} // This code is contributed by 29AjayKumar
<script> // Javascript program to implement// the above approach // Function to find the minimum number of ratsfunction minRats(n){    return Math.ceil(Math.log2(n));} // Driver Code // Number of bottlesvar n = 1025;document.write("Minimum " + minRats(n) +               " rat(s) are required");                // This code is contributed by importantly </script>
Minimum 11 rat(s) are required
 
divyamohan123
ankthon
29AjayKumar
ManasChhabra2
sohamkhunte123
importantly
Puzzles
Puzzles
Puzzles
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
SDE SHEET - A Complete Guide for SDE Preparation
Algorithm to solve Rubik's Cube
Top 20 Puzzles Commonly Asked During SDE Interviews
Container with Most Water
Puzzle 21 | (3 Ants and Triangle)
Puzzle 24 | (10 Coins Puzzle)
Puzzle | Set 35 (2 Eggs and 100 Floors)
Puzzle | 3 cuts to cut round cake into 8 equal pieces
Puzzle 31 | (Minimum cut Puzzle)
Puzzle 27 | (Hourglasses Puzzle)