经典软件面试题(1)

1000瓶酒中只有1瓶毒酒,给你10只老鼠,每只老鼠只能喝一次,如何检测出这瓶毒酒?

知识点:二进制。

解题思路:此题考察的是二进制。2的10次方等于1024,1024以内的所有自然数都可以用10个数位的二进制数表示出来。1000小于1024,此题可解。

将1000瓶酒从1到1000分别进行编号,并转化成10个数位的二进制数表示。


编号


转化成二进制


1


0000000001


2


0000000010


3


0000000011


4


0000000100




999


1111100111


1000


1111101000

  从每瓶酒中取出若干滴,取几滴由10个数位上1的个数决定,每滴放入10个大碗对应的碗中(为了描述的方便,假设有10个大碗,并从1到10进行编号)。最后,让10只老鼠分别喝10个碗中的酒。被毒死的老鼠用1表示,没有被毒死的老鼠用0表示,这样就构成了一个10个数位的二进制数,这个二进制数转换成10进制数,就是酒瓶的编号,此编号的这瓶酒就是毒酒。

第2种作法:

前500瓶,每瓶取一点,放在一起,给第1只老鼠喝,老鼠死了,就是前500瓶,如果没死,就在后500瓶,即第1只老鼠可以将范围缩小一半到500瓶。

500瓶的一半250瓶,每瓶取一点,放在一起,给第2只老鼠喝,老鼠死了,就是所取的250瓶,如果没死,就在另外250瓶,即第2只老鼠可以将范围再缩小一半到250瓶。

第3只老鼠,将范围再缩小到125瓶。

第4只老鼠,将范围再缩小到63瓶。

第5只老鼠,将范围再缩小到32瓶。

第6只老鼠,将范围再缩小到16瓶。

第7只老鼠,将范围再缩小到8瓶。

第8只老鼠,将范围再缩小到4瓶。

第9只老鼠,将范围再缩小到2瓶。

第10只老鼠,将范围再缩小到1瓶。

时间: 2024-07-28 15:50:14

经典软件面试题(1)的相关文章

经典软件面试题(2)

设链表节点为 [cpp] view plaincopy typedef struct tagListNode{       int data;       struct tagListNode* next;   }ListNode, *List;   要求将一带链表头List head的单向链表逆序. 分析:   1). 若链表为空或只有一个元素,则直接返回:   2). 设置两个前后相邻的指针p,q. 将p所指向的节点作为q指向节点的后继:   3). 重复2),直到q为空   4). 调整链

Spring,hibernate,struts经典面试笔试题(含答案)_java

本文讲述了Spring,hibernate,struts经典面试笔试题及其参考答案.分享给大家供大家参考,具体如下: 1.Hibernate工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久化操作 6.提交事务 7.关闭Session 8.关闭SesstionFactory 为什么要用: ① . 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代

JS经典正则表达式笔试题汇总_javascript技巧

本文实例总结了JS经典正则表达式笔试题.分享给大家供大家参考,具体如下: 一.复习字符串的传统操作 如何获取一个字符串中的数字字符,并按数组形式输出,如 dgfhfgh254bhku289fgdhdy675gfh 输出[254,289,675] 分析:循环用charAt()的方法获取到每一个子字符串,判断他是不是在0~9之间,是就把他扔到准备好的数组里 var str="dgfhfgh254bhku289fgdhdy675gfh"; findNum(str); function fin

网络英雄今何在:国内外经典软件作者大盘点

曾几何时,编程高手一直是人们顶礼膜拜的对象,是人们心目中的IT软件英雄.然时过境迁,当编程从阳春白雪走向下里巴人,许多经典作品被更新换代,也同时也演绎了IT软件英雄们的悲欢离合.并不是每个IT英雄都像盖茨一样功成名就辉煌至今.他们或功成不名就,或英雄落寞,本文就带你巡视一下国内外经典软件作者们的今朝.Netscape马克·安德森:投资人马克·安德森国人对于浏览器的印象大多是从微软IE开始的,但IE是基于Mosaic浏览器开发的,而Mosaic的开发者正是马克·安德森.但因Mosaic属于安德森工

100+经典Java面试题及答案解析

Java是一个支持并发.基于类和面向对象的计算机编程语言.下面列出了面向对象软件开发的优点: 代码开发模块化,更易维护和修改. 代码复用. 增强代码的可靠性和灵活性. 增加代码的可理解性.   面向对象编程有很多重要的特性,比如:封装,继承,多态和抽象.下面的章节我们会逐个分析这些特性.   封装   封装给对象提供了隐藏内部特性和行为的能力.对象提供一些能被其他对象访问的方法来改变它内部的数据.在Java当中,有3种修饰符:public,private和protected.每一种修饰符给其他的

一道经典JAVA面试题

问题描述 客户端从服务器读取数据,是要花费一定时间的.客户端发送价格1.1给服务器猴返回客户端的数据如下格式:价格排名1.11001.2100..........2.0100客户端发送价格2.1给服务器猴返回客户端的数据如下格式:2.1992.2992.398..........3.096价格是递增的,排名也是递增的,也可能与以前相同.价格的范围是1-100如何以最快的方法找到客户端要的排名对应的最低价格.如:需要找第2名,最低价格 解决方案 解决方案二:二分查找解决方案三:二分算法想过,不过这

经典java面试题

一.你对MVC的理解,MVC有什么优缺点?结合Struts,说明在一个Web应用如何去使用? 答: MVC设计模式(应用观察者模式的框架模式) M: Model(Business process layer),模型,操作数据的业务处理层,并独立于表现层(Independent of presentation). V: View(Presentation layer),视图,通过客户端数据类型显示数据,并回显模型层的执行结果. C: Controller(Control layer),控制器,也就

69个经典Spring面试题和答案

Spring 概述 1. 什么是spring? Spring 是个java企业级应用的开源开发框架.Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用.Spring 框架目标是简化Java企业级应用开发,并通过POJO为基础的编程模型促进良好的编程习惯. 2. 使用Spring框架的好处是什么? 轻量:Spring 是轻量的,基本的版本大约2MB. 控制反转:Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们. 面向切面的

经典算法(12) 数组中只出现1次的两个数字(百度面试题)

首先来看题目要求: 在一个数组中除两个数字只出现1次外,其它数字都出现了2次, 要求尽快找 出这两个数字. 考虑下这个题目的简化版--数组中除一个数字只出现1次外,其它数字都成对出现 ,要求尽快找出这个数字.这个题目在之前的<位操作基础篇之位操作全面总结>中的"位操作趣味应用" 中就已经给出解答了.根据异或运算的特点,直接异或一次就可以找出这个数字. 现在数组中有两个 数字只出现1次,直接异或一次只能得到这两个数字的异或结果,但光从这个结果肯定无法得到这个两个数字 .因此我