老鼠药和毒瓶问题
给定 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 瓶:
Minimum number of rats required are = ceil(log2 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