# Rat and Poisoned bottle Problem

• Difficulty Level : Medium
• Last Updated : 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++

 `// C++ program to implement` `// the above approach`   `#include ` `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

 `// 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

 `# 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#

 `// 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`

## Javascript

 ``

Output:

`Minimum 11 rat(s) are required`

My Personal Notes arrow_drop_up
Recommended Articles
Page :