首頁 > 後端開發 > C++ > 主體

C程式的蛋掉落謎題 - DP-11

王林
發布: 2023-08-30 11:53:03
轉載
536 人瀏覽過

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

這是一個著名的難題。假設有一棟 n 層樓的建築,如果我們有 m 個雞蛋,那麼我們如何找到可以安全地將雞蛋掉落而不打破雞蛋的樓層所需的最少掉落次數。

有一些重要的要點需要記住 -

  • 當雞蛋沒有從給定的樓層破裂時,那麼它在任何較低的樓層也不會破裂。
  • 如果一個雞蛋從給定的樓層破裂,那麼它也會在所有上面的樓層破裂。
  • 當雞蛋破裂時,它必須被丟棄,否則我們可以再次使用它。

輸入- 雞蛋數量和最大樓層。假設雞蛋數量為 4,最大樓層為 10。

輸出- 最小試驗次數 4。

演算法

eggTrialCount(雞蛋,樓層)

#輸入− 雞蛋數量、最大樓層。

輸出 − 取得雞蛋的最小數量試驗。

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
登入後複製

範例

 即時示範

#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));
}
登入後複製

輸出

Enter number of eggs: 4
Enter max Floor: 10
Minimum number of trials: 4
登入後複製

以上是C程式的蛋掉落謎題 - DP-11的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:tutorialspoint.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!