Maison > développement back-end > C++ > Puzzle de chute d'œufs du programme C - DP-11

Puzzle de chute d'œufs du programme C - DP-11

王林
Libérer: 2023-08-30 11:53:03
avant
652 Les gens l'ont consulté

C程序的蛋掉落谜题 - DP-11

C'est un puzzle célèbre. Supposons qu'il y ait un bâtiment avec n étages, si nous avons m œufs, alors comment trouver le nombre minimum de chutes requis sur un étage où nous pouvons laisser tomber les œufs en toute sécurité sans les casser.

Il y a quelques points importants à retenir -

  • Quand un œuf ne se fissure pas à partir d'un étage donné, il ne se fissurera pas non plus à partir d'un étage inférieur.
  • Si un œuf se brise à un étage donné, il se brisera également à tous les étages supérieurs.
  • Lorsque l'œuf se brise, il doit être jeté ou nous pouvons le réutiliser.

Entrez- le nombre d'œufs et le plancher maximum. Supposons que le nombre d’œufs soit de 4 et que le plancher maximum soit de 10.

Sortie- Nombre minimum d'essais 4.

Algorithme

eggTrialCount(egg, floor)

Entrée− nombre d'œufs, étage maximum.

Sortie − Obtenez le nombre minimum d'œufs testés.

Begin
   define matrix of size [eggs+1, floors+1]
   for i:= 1 to eggs, do
      minTrial[i, 1] := 1
      minTrial[i, 0] := 0
   done
   for j := 1 to floors, do
      minTrial[1, j] := j
   done
   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
         done
      done
   done
   return minTrial[eggs, floors]
End
Copier après la connexion

Exemple

Démonstration en temps réel

#include<stdio.h>
#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
         floor
         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
   floor
}
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));
}
Copier après la connexion

Sortie

Enter number of eggs: 4
Enter max Floor: 10
Minimum number of trials: 4
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal