Open In App

Rat and Poisoned bottle Problem

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. 

Minimum number of rats required are = ceil(log2 N))
 



Below is the implementation of the above approach:  




// C++ program to implement
// the above approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to find the minimum number of rats
int minRats(int n)
{
    return ceil(log2(n));
}
 
// Driver Code
int main()
{
    // Number of bottles
    int n = 1025;
 
    cout << "Minimum " << minRats(n)
         << " rat(s) are required"
         << endl;
 
    return 0;
}




// Java program to implement
// the above approach
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;
     
        System.out.println("Minimum " + minRats(n) +
                           " rat(s) are required");
    }   
}
 
// This code is contributed by AnkitRai01




# Python3 program to implement
# the above approach
import math
 
# Function to find the
# minimum number of rats
def minRats(n):
     
    return math.ceil(math.log2(n));
 
# Driver Code
 
# Number of bottles
n = 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 approach
using 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 rats
function minRats(n)
{
    return Math.ceil(Math.log2(n));
}
 
// Driver Code
 
// Number of bottles
var n = 1025;
document.write("Minimum " + minRats(n) +
               " rat(s) are required");
                
// This code is contributed by importantly
 
</script>

Output: 
Minimum 11 rat(s) are required

 


Article Tags :