C Program for Egg Dropping Puzzle - DP-11?

CServer Side ProgrammingProgramming

This is a famous puzzle problem. Suppose there is a building with n floors, if we have m eggs, then how can we find the minimum number of drops needed to find a floor from which it is safe to drop an egg without breaking it.

There some important points to remember −

  • When an egg does not break from a given floor, then it will not break for any lower floor also.
  • If an egg breaks from a given floor, then it will break for all upper floors.
  • When an egg breaks, it must be discarded, otherwise we can use it again.

Input - The number of eggs and the maximum floor. Say the number of eggs are 4 and the maximum floor is 10.

Output - Minimum number of trials  4.


eggTrialCount(eggs, floors)

Input − Number of eggs, maximum floor.

Output − Get minimum number of trials.

   define matrix of size [eggs+1, floors+1]
   for i:= 1 to eggs, do
      minTrial[i, 1] := 1
      minTrial[i, 0] := 0
   for j := 1 to floors, do
      minTrial[1, j] := j
   for i := 2 to eggs, do
      for j := 2 to floors, do
         minTrial[i, j] := ∞
         for k := 1 to j, do
            res := 1 + max of minTrial[i-1, k-1] and minTrial[i, j-k]
            if res < minTrial[i, j], then minTrial[i,j] := res
   return minTrial[eggs, floors]


 Live Demo

#define MAX_VAL 9999
int max(int a, int b) {
   return (a > b)? a: b;
int eggTrialCount(int eggs, int floors) { //minimum trials for worst case
   int minTrial[eggs+1][floors+1]; //to store minimum trials for i-th egg
   and jth floor
   int res, i, j, k;
   for (i = 1; i <= eggs; i++) { //one trial to check from first floor, and
      no trial for 0th floor
      minTrial[i][1] = 1;
      minTrial[i][0] = 0;
   for (j = 1; j <= floors; j++) //when egg is 1, we need 1 trials for
      each floor
      minTrial[1][j] = j;
   for (i = 2; i <= eggs; i++){ //for 2 or more than 2 eggs
      for (j = 2; j <= floors; j++) { //for second or more than second
         minTrial[i][j] = MAX_VAL;
         for (k = 1; k <= j; k++) {
            res = 1 + max(minTrial[i-1][k-1], minTrial[i][j-k]);
            if (res < minTrial[i][j])
               minTrial[i][j] = res;
   return minTrial[eggs][floors]; //number of trials for asked egg and
int main () {
   int egg, maxFloor;
   printf("Enter number of eggs: ");
   scanf("%d", &egg);
   printf("Enter max Floor: ");
   scanf("%d", &maxFloor);
   printf("Minimum number of trials: %d", eggTrialCount(egg, maxFloor));


Enter number of eggs: 4
Enter max Floor: 10
Minimum number of trials: 4
Updated on 30-Jul-2019 22:30:26