设计算法1

题目:

有一幢100楼的大厦,两部手机,让你设计一种算法确切地知道这部手机在第几楼摔下会坏分析:
第一步手机是用来决定在0-100层之间需要划分几个区间

第二步手机是用来在已发现可以导致手机摔坏的区间内一级一级往上加楼层已具体测试是哪一层的工具。

假设第一步手机划分的区间为a个,每个区间包含的层数为b。

则可以得出a*b=100。

所谓的最优化,既是让测试的次数尽量最小,即让a+b+1次数尽量最小,也就是让a+b最小。

现在就简单了,转化为一个数学题。已知a*b=100,问当a+b取最小值时,a=?,b=?。
具体做法就是:将一部手机从10楼扔下,如果坏,则拿第二部手机从一楼开始,逐层往上试,则实验最大次数为10+1=11次。

如果没坏,则将第一部手机从20楼仍下,如果坏,则将第二部手机从11楼开始,逐层往上试,实验最大次数为10+2=12次。

以此类推,当第一部手机从第90层扔下时,如果坏,则从81曾逐层往上,如不坏,也不用从第一百层扔了,从91层开始吧。
 
				
时间: 2024-11-07 18:41:44

设计算法1的相关文章

使用E.W.D.Dijkstra设计算法实现算数表达式求值

要求:编程模拟(1+(2+3)*(4*5))的运算过程,重点在于如何解析由括号运算符和数字组成的字符串,并按照正确的顺序完成各种初级运算符的操作. 实现思路:用两个栈(LIFO)结构来实现(一个用于保存运算符,一个用于保存操作数) 将操作数压如操作数栈 将操作符压如操作符栈 忽略左括号 在遇到右括号时,弹出一个运算符,并弹出所需数量的操作数,并将操作符和操作数的运算结果压到操作数栈 1 package com.luochuang.demo.stdlib; 2 3 public class Eva

【算法基础】由插入排序来看如何分析和设计算法

插入排序及其解决思路 算法的作用自然不用多说,无论是在校学生,还是已经工作多年,只要想在计算机这条道路走得更远,算法都是必不可少的. 就像编程语言中的"Hello World!"程序一般,学习算法一开始学的便是排序算法.排序问题在日常生活中也是很常见的,说得专业点: 输入是:n个数的一个序列<a1,a2,...,an?1,an> 输出是:这n个数的一个全新的序列<a,1,a,2,...,a,n?1,a,n>,其特征是a,1≤a,2≤...≤a,n?1≤a,n 举

【算法】1 由插入排序看怎样分析和设计算法

插入排序及其解决思路 算法的作用自然不用多说.不管是在校学生,还是已经工作多年.仅仅要想在计算机这条道路走得更远,算法都是不可缺少的. 就像编程语言中的"Hello World."程序一般.学习算法一開始学的便是排序算法. 排序问题在日常生活中也是非经常见的,说得专业点: 输入是:n个数的一个序列<a1,a2,...,an?1,an> 输出是:这n个数的一个全新的序列<a,1,a,2,...,a,n?1,a,n>,其特征是a,1≤a,2≤...≤a,n?1≤a,

【算法】1 由插入排序看如何分析和设计算法

插入排序及其解决思路 算法的作用自然不用多说,无论是在校学生,还是已经工作多年,只要想在计算机这条道路走得更远,算法都是必不可少的. 就像编程语言中的"Hello World!"程序一般,学习算法一开始学的便是排序算法.排序问题在日常生活中也是很常见的,说得专业点: 输入是:n个数的一个序列<a1,a2,...,an?1,an> 输出是:这n个数的一个全新的序列<a,1,a,2,...,a,n?1,a,n>,其特征是a,1≤a,2≤...≤a,n?1≤a,n 举

《算法导论》读书笔记--第二章 2.3 设计算法

我们可以使用的算法设计技术有很多.插入排序用的是增量方法,即在已经排好的数组中不断加入新的元素.下面考虑一种被称为"分治法"的设计方法. 2.3.1分治法 分治法的思想:将原问题分解为几个规模较小但是类似于原问题的子问题,递归地求解这些子问题,然后合并这些子问题的解来建立原问题的解.分治模式在每层递归时有三个步骤: 分解原问题为若干子问题: 解决这些子问题,递归地求解各子问题,若子问题规模足够小,则直接求解: 合并这些子问题的解成原问题的解. 归并排序算法完全遵循分治模式,操作如下:

设计算法时要确保分类讨论的完备性

1 何为完备性 如果算法有多个分支的话,要确保每个分支都走到了.这个时候如果不整理清楚自己就搞混了,编程就容易出现错误.要整理清楚. 2 什么情况会出现完备性难题 当算法的走向同时受2个.3个及其以上的变量的取值的影响的时候,会出现要分成多个分支来考虑,从而出现完备性难题. 比如3个变量,都可以取true和false,那么就有8种可能的情况出现.除此之外,最要命的是,要确保逻辑上的合理性,在确定变量的判定的顺序时,也需要探索一下,可能a的判定放在b的后面会让整个逻辑更清楚一下. 3 怎样确保完备

设计算法能够计算出读者购买一批书的最低价格

一.题目:      n书店针对<哈利波特>系列书籍进行促销活动,一共5卷,用编号0.1.2.3.4表示,单独一卷售价8元, 具体折扣如下所示 本数 2,折扣5%:本数 3,折扣10%:本数4 ,折扣20%:本数5,折扣25%:根据购买的卷数以及本数,会对应不同折扣规则情况.单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠. 二.解题思路: 通过对6本书.7本书.8本书.9本书的分析得到当本数为6.7.9时,最便宜的组合为5+1,5+

交互设计算法基础(3) - Quick Sort

1 int pivotIndex, pivot, swapIndex; 2 3 void swap(int[] arr, int x, int y) { 4 int temp = arr[x]; 5 arr[x] = arr[y]; 6 arr[y] = temp; 7 } 8 9 void quickSort(int[] arr, int start, int end) { 10 if (end <= start) return; 11 12 pivotIndex = (start + end

交互设计算法基础(4) - Hash Table

1 2 import java.util.Map; 3 4 // Note the HashMap's "key" is a String and "value" is an Integer 5 HashMap<String,Integer> hm = new HashMap<String,Integer>(); 6 7 // Putting key-value pairs in the HashMap 8 hm.put("Ava&