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)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 20:58:06
下一篇 2025年12月9日 05:23:39

相关推荐

  • 将一个以链表表示的数字加1

    数字的链表表示是这样提供的:链表的所有节点都被视为数字的一位数字。节点存储数字,使得链表的第一个元素保存数字的最高有效位,链表的最后一个元素保存数字的最低有效位。例如,数字 202345 在链表中表示为 (2->0->2->3->4->5)。 要向这个表示数字的链表添加…

    2025年12月17日
    000
  • 计算商和余数的C程序?

    Given two numbers dividend and divisor. The task is to write a program to find the quotient and remainder of these two numbers when the dividend is di…

    2025年12月17日
    000
  • 使用结构体编写的C程序,用于计算圆和圆柱体的面积

    在C编程语言中,我们可以利用结构体来找到圆的面积、圆柱体的面积和体积。 用于找到圆的面积的逻辑如下: s.areacircle = (float)pi*s.radius*s.radius; 用于计算圆柱体的面积的逻辑如下: s.areacylinder = (float)2*pi*s.radius*…

    2025年12月17日
    000
  • 使用C++编写的代码:找到使用字母表前K个字母组成的字典序最小的字符串,且相邻字符不能相同

    在编程世界中,解决字符串操作问题是一个常见且有趣的挑战。面临的一个关键问题是如何仅利用字母表中的 K 个字母来获得按字典顺序排列的最小字符串,同时遵循诸如不匹配相邻字符之类的附加约束。在本文中,我们的目的是深入研究这个问题并使用 C++ 编程语言提出有效的解决方案。通过详细介绍语法中使用的不同方法并…

    2025年12月17日
    000
  • 递归程序打印所有小于N的仅由数字1或3组成的数字

    We are given an integer variable as N storing the positive integer type value. The task is to recursively print all the numbers less than given value …

    2025年12月17日
    000
  • C程序打印所有ASCII值

    问题 打印 0 到 255 个字符的美国信息交换标准代码 (ASCII) 值,而不将字符初始化为整数类型变量。只需使用格式说明符即可。 解决方案 这里我们编写一个程序,仅打印 65 到 122。 如果您想查看所有 ASCII值,在 for 循环中你可以写如下 – For(i=0;i&lt…

    2025年12月17日
    000
  • 最多可以购买的糖果数量

    我们得到了一个糖果[]数组,长度存储在“size”中。每个元素 candies[i] 都有一个 i 类型糖果的编号。目标是用任意金额购买尽可能多的糖果。条件如下 – 如果您购买类型 i 的 X[i] (0 X(j) X(j)=0,没有购买j类型的糖果 我们通过例子来理解。 输入 &#82…

    2025年12月17日
    000
  • 使用C++将二进制矩阵中的退出点进行翻译

    二进制矩阵是指在计算机编程术语中,由0和1组成的行和列的网格。在编程面试和比赛中遇到的一个编码挑战是确定二进制矩阵中的退出点。在本文中,我们将解释使用C++解决这个问题的不同方法。 语法 在深入研究算法之前,我们可能会发现先熟悉一下在我们即将展示的代码示例中经常出现的语法会有益处。 `pair fi…

    2025年12月17日
    000
  • 使用交换最小化两个数组中最大数的乘积

    数据结构操作现在已成为现代编程和计算中成功解决方案开发的一个重要方面。这是由于随着时间的推移,这些结构所呈现的复杂性不断增加。一个例子是执行交换操作以最小化包含在两个数组中的最大数的总和,从而降低它们的整体值。在这篇文章中,我们讨论了两种使用C++完成这些任务的方法,同时根据不同观点承认了这两种方法…

    2025年12月17日
    000
  • 在C程序中,将一个数组中具有最大AND值的一对元素打印出来

    根据问题,我们给定了一个包含n个正整数的数组,我们需要从数组中找到具有最大AND值的一对。 示例 Input: arr[] = { 4, 8, 12, 16 }Output: pair = 8 12The maximum and value= 8Input:arr[] = { 4, 8, 16, 2…

    2025年12月17日
    000
  • C语言中的预处理器命令是什么?

    预处理器是一个在源代码通过编译器之前发送的程序。它根据以符号#开头的预处理指令进行操作。 类型 预处理器命令有三种类型,如下所示: 宏替换指令。 文件包含指令。 编译器控制指令。 宏替换指令 它将每个标识符的出现都替换为预定义的字符串。 定义宏替换指令的语法如下: # define identifi…

    2025年12月17日
    000
  • Klee的算法(线段的并集长度)在C++中

    在本教程中,我们将编写一个程序,用于查找线段的并集的长度。 我们已经给出了线段的起点和终点,我们需要找到线段的并集的长度。 我们将使用的算法称为klee’s算法。 让我们来看看解决这个问题的步骤。 立即学习“C++免费学习笔记(深入)”; 用所有线段的坐标初始化数组。初始化一个名为poi…

    2025年12月17日
    000
  • Thread类的方法

    Thread 类的一些流行方法是 start、sleep、jon 和 abort。让我们看看完整的方法列表 – 先生编号 方法及说明 1 public void Abort() 在调用它的线程中引发 ThreadAbortException,以开始终止线程的过程。调用该方法通常会终止线程…

    2025年12月17日
    000
  • 检查是否可能从原点到达给定圆的周长上的任意点

    圆的周长可以定义为圆的外边界。它是圆的周长。圆周围的每个点都遵循某些属性,如下所示 – 点 (x,y) 位于圆内,使得 $mathrm{x^2 + y^2 点 (x,y) 位于圆上,使得 $mathrm{x^2 + y^2 = R^2}$ 点 (x,y) 位于圆外,使得 $mathrm{…

    2025年12月17日
    000
  • 在C++中,将给定的四个数字组成的第n个数字的位数

    We need to find the number of digits in the nth number made of given four digits 1, 2, 3, and 4. The series with the above four digits is as follows 1…

    2025年12月17日
    000
  • 在C语言中的布尔数组谜题

    这是一个基于数组的谜题,需要你将包含两个元素的数组中的所有数字都更改为0。数组的一个元素是0,另一个元素可能是0也可能不是。 要解决这个谜题,程序需要找到非零元素并将其更改为0。 以下是解决布尔数组谜题所需的约束条件 − 允许的操作是补集,其他操作不允许。不允许使用循环和条件语句。也不允许直接赋值。…

    2025年12月17日
    000
  • 并查集算法中的等级合并和路径压缩

    称为并查集(或不相交集)的算法负责维护不同的集合,并提供操作来验证集合中的成员资格并将集合组合在一起。它熟练地处理并集和查找操作,这对于维护元素之间的当前连接信息至关重要。 语法 为了确保清晰度,让我们首先理解即将在接下来的代码示例中使用的方法的语法。 // Method to perform Un…

    2025年12月17日
    000
  • 使用最小堆进行降序的堆排序

    堆排序 – 堆排序是一种基于比较的算法,它使用二叉树数据结构按升序或降序对数字列表进行排序。它通过堆排序创建一个堆数据结构,其中根是最小元素,然后删除根,再次排序在根位置给出列表中第二小的数字。 最小堆 – 最小堆是一种数据结构,其中父节点始终小于子节点,因此根节点是所有元素…

    2025年12月17日
    000
  • 计算由单个不同字符组成的子字符串的数量

    在本文中,我们将讨论计算给定字符串中由单个不同字符组成的子字符串数量的问题。我们将探索一种有效的算法来解决这个问题,并提供 C++ 代码来实现它。 问题陈述 给定一个字符串 S,任务是计算由单个不同字符组成的子字符串的数量。 例如,如果输入字符串为“aaaaa”,则输出应为 15,因为有 15 个子…

    2025年12月17日
    000
  • 删除链表中的每个第K个节点

    在本文中,我们将解释如何删除链表中的每个第k个节点。我们必须删除位于k的倍数上的每个节点,即我们必须删除位置为k、2*k、3*k等的节点。 Input : 112->231->31->41->54->63->71->85 k = 3Output : 112-…

    2025年12月17日
    000

发表回复

登录后才能评论
关注微信