`
daojin
  • 浏览: 689536 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

騰訊大廈有39層的問題解決方案。

 
阅读更多
問題:

腾讯大厦有39层,你手里有两颗一抹一眼的玻璃珠。当你拿着玻璃珠在某一层往下扔的时候,一定会有两个结果,玻璃珠碎了或者没碎。大厦有个临界楼层。低于它的楼层,往下扔玻璃珠,玻璃珠不会碎,
* 等于或高于它的楼层,扔下玻璃珠,玻璃珠一定会碎。玻璃珠碎了就不能再扔。现在让你设计一种方式,使得在该方式下,最坏的情况扔的次数比其他任何方式最坏的次数都少。也就是设计一种最有效的方式来确定临界楼层

解決方法

用户随机选一层i,扔下去,有两个结果:

碎掉,或者没有碎掉。

1.如果碎掉,去试验前i-1层,那么最多需要i-1次再加上碎掉的那一次,最多就是i次。

2.如果没有碎掉,等于说从第i+1层往后,也还是有两个弹珠,这就回到了递归的思路上了。
在这种没有碎掉的情况下,假如总共有N层,那么N层的最多次数等于N-i层的最多次数。所以

针对用户随机选择的这一层i, 以上1和2两种情况, 求其最大值就是最差情况下的次数。

用户随机选择的这个i,也可以变化的,取值 1,2,3...N. 那么我们就会得到不同的值。
针对1,2,3...N. 会有N个,所有这些值中取最小,就是最优解。  用F(N)表示这个最优解,那么F(0)由于没有楼层,所以一定等于0,也就是说不需要实验。
F(0) = 0;
F(N)= min(max(1, F(N-1) + 1), max(2, F(N-2)+ 1)... max(N, F(0)+ 1))

F(0) = 0;
F(1) = 1;
F (2) = min(max(1, F(1)+ 1), max(2, F(0) + 1)) = 2;

可以使用递归算法求得其值,最终的结果是9次。

下面是代碼
package interview;

import java.util.ArrayList;

public class ThrowPinballFrom30Layer {
	/**
	 * 腾讯大厦有39层,你手里有两颗一抹一眼的玻璃珠。当你拿着玻璃珠在某一层往下扔的时候,一定会有两个结果,玻璃珠碎了或者没碎。大厦有个临界楼层。低于它的楼层,往下扔玻璃珠,玻璃珠不会碎,
	 * 等于或高于它的楼层,扔下玻璃珠,玻璃珠一定会碎。玻璃珠碎了就不能再扔。现在让你设计一种方式,使得在该方式下,最坏的情况扔的次数比其他任何方式最坏的次数都少。也就是设计一种最有效的方式来确定临界楼层
	 * 
	 * @param 39
	 *            layer
	 * @return the optimal step for the first ball.
	 */
	public static int getOptimalStep(int N, int[] results, int[] selection) {
		if (N == 0) {
			results[N] = 0;
			return 0;
		}
		if (results[N] >= 0) {
			return results[N];
		}

		int selectedIndex = 0;
		int min = -1;
		for (int i = 0; i < N; i++) {
			int max = Math.max(i + 1, getOptimalStep(N - i - 1, results, selection) + 1);
			if (min < 0) {
				min = max;
				selectedIndex = i;
			} else {
				if (min > max) {
					selectedIndex = i;
					min = max;
				}
			}
		}
		//System.out.println("N = " + N + ", selectedIndex = " + selectedIndex);
		selection[N] = selectedIndex;
		results[N] = min;
		return min;
	}

	public static void main(String[] args) {

		int N = 39;
		int[] results = new int[N + 1];
		for (int i = 0; i < results.length; ++i) {
			results[i] = -1;
		}
		int[] selection = new int[N + 1];

		System.out.println("optimal steps:" + getOptimalStep(N, results, selection));

		ArrayList<Integer> steps = new ArrayList<>();

		int leftCount = N;
		int pSelected = 0;

		while (true) {
			if (leftCount <= 0) {
				break;
			}
			pSelected = pSelected + selection[leftCount];
			steps.add(pSelected);
			pSelected = pSelected + 1;
			leftCount = N - pSelected;
		}

		StringBuilder sb = new StringBuilder();

		sb.append("selections:");
		sb.append("[");
		for (int i = 0; i < steps.size(); ++i) {
			if (i != 0) {
				sb.append(",");
			}
			sb.append(steps.get(i) + 1);
		}
		sb.append("]");

		System.out.println(sb.toString());
	}
}



打印結果:


optimal steps:9
selections:[3,11,18,24,29,33,36,38,39]


完畢
0
0
分享到:
评论

相关推荐

    企业微信大型企业办公解决方案.pdf

    "企业微信大型企业办公解决方案" 根据提供的文件信息,本解决方案旨在解决大型企业办公中的各种痛点,通过企业微信强大的专业办公管理和连接能力,将园区软件、硬件、服务、实现统一的解决方案。 园区概况 西安...

    腾讯面试记录.zip

    - 这一时间点的面试记录反映了当时的面试标准和流程,可能包括了面试的常见问题,如自我介绍、项目经验分享、问题解决案例等。 - 面试者在面试过程中的表现,尤其是面对挑战和压力时的反应,可能会被详细记录下来...

    BIM在腾讯北京总部大楼项目中的应用.rar

    在腾讯北京总部的建设中,这种技术有助于提前预见并解决潜在的施工问题,优化资源配置,有效控制成本。 4. **施工过程中的碰撞检测**:在施工前,BIM可以进行碰撞检测,发现不同专业之间的设计冲突,避免了在实际...

    超高层建筑核心筒后施结构防护平台的研制QC.docx

    总的来说,腾讯滨海大厦的超高层建筑核心筒后施结构防护平台的研制,充分展示了QC小组如何通过系统的方法解决实际工程难题,体现了技术创新在建筑工程中的关键作用。这一成果不仅提高了施工安全性,也推动了超高层...

    工程总承包工程分包管理办法.docx

    - **变更、图纸差异等的处理要求**:对于设计变更或施工过程中出现的问题,规定了解决方案和审批流程。 6. **物资管理规定** - **材料品牌报审**:要求分包商提交拟使用材料的品牌和规格,经过审核后方可使用。 ...

    现代计算机应用

    例如,利用FAX/MODEM和特定的通讯软件,可以实现计算机与远程计算机或传真机之间的信息交换,这种解决方案操作简便,传输速度快,为无法直接接入Internet的用户提供了解决之道。 总之,现代计算机技术在办公自动化...

    智慧监所三维可视化管理平台.pdf

    智慧监所三维可视化管理平台主要汇聚了数字化企业的运维数据,...通过这种方式,智慧监所三维可视化管理平台提供了一个综合性的解决方案,可以极大地增强监所的安全性、提高管理效率,并有助于实现社会安全稳定的目标。

    梯影传媒推介书2.0.pdf

    梯影传媒推介书2.0.pdf 文件中涵盖了梯影传媒的详细介绍,包括公司定位、运营模式、媒体形式...梯影传媒不仅构建了一个全方位、高效率的媒体网络,同时也在技术和内容营销上不断创新,为广告主提供精准的营销解决方案。

    2021智慧城市优秀案例集 全球智慧城市大会.pdf

    2021智慧城市优秀案例集汇聚了全球各地的优秀实践,展示了一系列智慧城市解决方案。 【交通工程】在交通工程方面,案例集提到了几个亮点项目。如广州市的“穗智管”城市运行管理中枢,通过智慧城市建设,助力城市疫...

    2020北京智能家居博览会.pdf

    北京国际智能家居博览会(以下简称CEE)是森展国际展览有限公司旗下的知名展览品牌,系第十九届北京电博会主题展之一,于2002年创办,行业号称630北京智能家居展,CEE是亚洲顶尖的高新技术产品及解决方案的展示平台...

Global site tag (gtag.js) - Google Analytics