Open In App

Egg Dropping Puzzle with 2 Eggs and K Floors

Last Updated : 27 Apr, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

Given 2 eggs and k floors, find the minimum number of trials needed in worst case. This problem is a specific case of n eggs and k floors.
Examples: 
 

Input : k = 10
Output : 4
We first try from 4-th floor. Two cases arise,
(1) If egg breaks, we have one egg left so we
    need three more trials.
(2) If egg does not break, we try next from 7-th
    floor. Again two cases arise.
We can notice that if we choose 4th floor as first
floor, 7-th as next floor and 9 as next of next floor,
we never exceed more than 4 trials.

Input : k = 100
Output : 14

 

What is the worst case number of trials if we have only one egg? 
The answer is k. We will be trying from 1st floor, then 2nd, then 3rd and in worst case, the egg breaks from top floor.
What would be our first floor that we try if we have two eggs? 
We can notice that if our answer is x, then the first floor that we try has to be floor number x. Because in worst case if egg breaks, we have only one egg left and we have to try every floor from 1 to x-1. So total trials become 1 + (x – 1).
What would be our second floor that we try if egg does not break in first attempt? 
The next floor that we try has to be x + (x – 1) because our optimal answer is x and if egg breaks from floor number x + (x-1) we have to linearly try from floor number x+1 to x-2.
Can we generalize it? 
If first egg has not broken so far, then the i-th trial has to be from floor number x + (x – 1) + … + (x – i – 1).
How many floors we can cover with x trials? 
We can observe from above that we can cover x + (x – 1) + (x – 2) …. + 2 + 1 floors with x trials. The value of this expression is x * (x + 1) / 2.
What is the optimal x for a given k? 
From above, we know, 
 

x * (x + 1)/2 >= k
The optimal value of x can be written as,
?((-1 + ?(1+8k))/2)?

 

C++




// CPP program to find optimal number of trials
// for k floors and 2 eggs.
#include<bits/stdc++.h>
using namespace std;
 
int twoEggDrop(int k)
{
   return ceil((-1.0 + sqrt(1 + 8*k))/2.0);
}
 
int main()
{
   int k = 100;
   cout << twoEggDrop(k);
   return 0;
}


Java




// Java program to find
// optimal number of trials
// for k floors and 2 eggs.
import java.io.*;
 
class GFG
{
    static int twoEggDrop(int k)
    {
        return (int)Math.ceil((-1.0 +
                    Math.sqrt(1 + 8 * k)) / 2.0);
    }
     
    // Driver code
    public static void main (String[] args)
    {
        int k = 100;
        System.out.println(twoEggDrop(k));
    }
}
 
// This code is contributed
// by Mahadev.


Python3




# Python3 program to find optimal number
# of trials for k floors and 2 eggs.
import math as mt
 
def twoEggDrop(k):
    return mt.ceil((-1.0 +
           mt.sqrt(1 + 8 * k)) / 2)
 
# Driver Code
k = 100
print(twoEggDrop(k))
 
# This code is contributed
# by Mohit Kumar


C#




// C# program to find optimal number
// of trials for k floors and 2 eggs.
class GFG
{
static int twoEggDrop(int k)
{
    return (int)System.Math.Ceiling((-1.0 +
                System.Math.Sqrt(1 + 8 * k)) / 2.0);
}
 
// Driver code
public static void Main ()
{
    int k = 100;
    System.Console.WriteLine(twoEggDrop(k));
}
}
 
// This code is contributed
// by mits


PHP




<?php
// PHP program to find optimal number
// of trials for k floors and 2 eggs.
 
function twoEggDrop($k)
{
    return ceil((-1.0 +
           sqrt(1 + 8 * $k)) / 2.0);
}
 
// Driver Code
$k = 100;
echo twoEggDrop($k);
 
// This code is contributed
// by Akanksha Rai


Javascript




<script>
 
// JavaScript program to find optimal number of trials
// for k floors and 2 eggs.
 
function twoEggDrop(k)
{
   return Math.ceil((-1.0 + Math.sqrt(1 + 8*k))/2.0);
}
 
var k = 100;
document.write( twoEggDrop(k));
 
</script>


Output: 

14

Time Complexity : O(log(k))

Space complexity : O(1)
 



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads