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

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#define MAX_VAL 9999int 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: 4Enter max Floor: 10Minimum number of trials: 4

以上就是C程序的蛋掉落谜题 – DP-11的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1444067.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
将一个以链表表示的数字加1
上一篇 2025年12月17日 20:58:06
C/C++标记?
下一篇 2025年12月17日 20:58:23

相关推荐

发表回复

登录后才能评论
关注微信