📜  老鼠药和毒瓶问题

📅  最后修改于: 2022-05-13 01:57:26.291000             🧑  作者: Mango

老鼠药和毒瓶问题

给定 N 瓶,其中一瓶中毒。因此,任务是找出识别毒瓶所需的最少老鼠数量。一只老鼠一次可以喝任意数量的瓶子。

例子:

Input: N = 4 
Output: 2

Input: N = 100
Output: 7

方法:
让我们从基本情况开始。

  • 2 瓶:取一只老鼠 (R1) 。如果老鼠 R1 喝了瓶子 1 并死了,那么瓶子 1 是有毒的。否则瓶子2是有毒的。因此 1 只老鼠足以识别
  • 3瓶:取两只老鼠(R1)和(R2) 。如果老鼠 R1 喝了瓶子 1 和瓶子 3 并死了,那么瓶子 1 或瓶子 3 是有毒的。所以老鼠R2然后喝了瓶子1。如果它死了,那么瓶子 1 是有毒的,否则瓶子 3 是有毒的。
    现在,如果老鼠 R1 在喝了瓶子 1 和瓶子 3 后没有死,那么瓶子 2 是有毒的。
    因此2只大鼠足以识别。
  • 4 瓶:取两只老鼠 (R1) 和 (R2) 。如果老鼠 R1 喝了瓶子 1 和瓶子 3 并死了,那么瓶子 1 或瓶子 3 是有毒的。所以老鼠R2然后喝了瓶子1。如果它死了,那么瓶子 1 是有毒的,否则瓶子 3 是有毒的。
    现在如果老鼠R1在喝完1瓶和3瓶后没有死,那么2瓶或4瓶是有毒的。所以老鼠R1然后喝了瓶子2。如果它死了,那么瓶子 2 是有毒的,否则瓶子 4 是有毒的。
    因此2只大鼠足以识别。
  • 对于 N 瓶:

下面是上述方法的实现:

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


输出:
Minimum 11 rat(s) are required