一道逻辑题 房间里有100盏电灯
在 博客园看到的这个问题,也想做一下。题目是这样的
房间里有100盏电灯,编号为1,2,3……100,每盏灯上有一个按钮,初始时灯全都是关的。编好号的100位同学由房间外依次走进去,将自己编号的倍数的灯的按钮全部按一次,例如第一位同学把编号是1的倍数的灯的按钮按一下(此时100盏灯全亮),第二位同学把编号是2的倍数的灯的按钮按一下(此时只有50盏灯亮着,50盏被这个人按灭了)……第100位同学把编号是100的倍数的灯(即编号为100的灯)的按钮按一下,请问依次走完后,还有多少盏灯亮着?
最简单的做法就是模拟一下100个同学进入房间的情景,从1号同学开始每个人都去按一遍开关,最后看一下哪些灯亮着,这个方法最简单也最容易想到,可是效率有点低。其实可以计算一下每个开关被按下的次数,因为刚开始的时候所有的灯泡都是关着的,所以如果某个灯泡的开关被按了奇数次,那么这个灯泡最终就是开着的,否则就是关着的。那怎么计算每个灯泡开关被按下的次数呢?因为每个同学都会按下自己编号倍数的开关,即如果灯泡编号是同学编号的倍数,他就会按下开关,也就是说如果同学编号是灯泡编号的约数,他就会按下开关(这不是废话么)。那么统计一下灯泡编号约数的个数就可以了,约数个数为计数的灯泡最后开着,约数个数为偶数的灯泡最后关着。下边是代码:
public class Lamp {public static void main(String[] args){int result = 0;for(int i=1;i<=100;i++){if(isOdd(getFactorNum(i))){result += 1;}}System.out.println(result);}//求n约数的个数public static int getFactorNum(int n){int result = 0;for(int i=1;i<=n;i++){if(n%i == 0){result += 1;}}return result;}//判断n是否为奇数public static boolean isOdd(int n){return (n&1) == 1;}
}
--------------------------------更新------------------------------
又想了一下还有更简单的算法,因为一个数的约数都成成对出现的,也就是说如果n存在一个约数p,那么一定有一个q与之相对应且满足n=pq,所以n约数的个数一定是偶数,但是有一种情况例外,那就是p=q,所以只有编号为完全平方数的灯泡亮着。按着这个方法计算就简单多了,直接return (int)Math.sqrt(100);
一道逻辑题 房间里有100盏电灯相关推荐
- 转载:一道逻辑题 房间里有100盏电灯
转自:程序猿_哲 一道挺有意思的逻辑题 房间里有100盏电灯,编号为1,2,3--100,每盏灯上有一个按钮,初始时灯全都是关的. 编好号的100位同学由房间外依次走进去,将自己编号的倍 ...
- “房间里有100个人,每人都有100元钱,每轮每人要拿一元钱随机给另一个人”最后分布的python结果
下午看到了这个问题,一开始直觉当然是觉得每个人的期望都是一样的,大家都是公平的,最后肯定是差不多. 这就是直觉,而在统计学和随机过程的世界里,直觉往往是错误的. 我们用python仿真一下这个过程. ...
- 一道逻辑题 - 我拿走了哪个数
原文链接:http://www.cnblogs.com/baiyanhuang/archive/2010/06/23/1763981.html 有 1 到 10000 共 10000 个数,如果我从中 ...
- Interview QA - 房间里有三盏灯,屋里有三个开关分别控制这三盏灯。如何只进入房间一次就知道哪一个开关控制哪一盏灯?
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 先进入有 ...
- 【面试题】-100盏灯
一道挺有意思的逻辑题 房间里有100盏电灯,编号为1,2,3--100,每盏灯上有一个按钮,初始时灯全都是关的. 编好号的100位同学由房间外依次走进去,将自己编号的倍数的灯的按钮全部按 ...
- 100盏灯开关的问题
房间里有100盏电灯,编号为1,2,3--100,每盏灯上有一个按钮,初始时灯全都是关的.编好号的100位同学由房间外依次走进去,将自己编号的倍数的灯的按钮全部按一次,例如第一位同学把编号是1的倍数的 ...
- JAVA大厅有100盏灯_由100盏灯想到的(一)
大厅里有100盏灯,每盏灯都编了号码,分别为1-100.每盏灯由一个开关来控制.(开关按一下,灯亮,再按一下灯灭.开关的编号与被控制的灯相同.)开始时,灯是全灭的.现在按照以下规则按动开关. 第一次, ...
- 五年级数学:100盏灯问题
题目: 一间屋子里有100盏灯排成一行,按从左到右的顺序编上号1.2.3.4.5--99.100,每盏灯都有一个开关,开始全都关着,把100个学生排在后面,第1个学生把1的倍数的灯全都拉一下,第2个同 ...
- 面试题-100盏灯问题
题目 一间屋子里有100盏灯排成一行,按从左至右的顺序编号1.2.3.4.5-99.100,每盏灯都有一个开关,开始全部都关着,现有100个学生,第1个学生把1的倍数的灯全部拉一下,第2个学生把2的倍 ...
最新文章
- linux除了eeprom其他的保存方法,linux的EEPROM的读写控制.doc
- 程序(进程)内存分布 解析
- 企业网站做SEO优化必走的三条路线,希望新人前方不要右转
- swoole process进程 多分发
- 2015年百度一面试题
- boost asio 异步实现tcp通讯
- html5/css3响应式页面开发总结
- python修改excel后打印_python 处理excel并打印excel
- Tensorflow深度学习应用(进阶篇)-回归(函数拟合训练)-可视化
- _04媒体文件的读取
- html php交互json 结果集,基于HTML模板和JSON数据的JavaScript交互(移动端)
- sklearn 决策树例子_sklearn CART决策树分类
- IOS 项目性能优化
- Ubuntu安装opencv的扩展模块-viz模块
- pycharm 文件名不同颜色所代表的含义
- 设置WINRE的硬盘启动
- 【技术宅小伙】Git版本控制系统的使用
- 硬件断点和软件断点的区别
- c++ 数据结构 软件压缩/解压缩软件Szip(Huffman算法及应用)
- 数字IC手撕代码-流水握手(利用握手解决流水线断流、反压问题)
热门文章
- 5月30日第壹简报,星期一,农历五月初一
- ZPL 打印条码、二维码及小票(中文/汉字),生成条码、二维码图片【Asp.Net】-含示例代码
- ajax——请求消息(request)和响应消息(response)
- 结婚5年又发现了一场爱情 感人
- 制作双启动(传统BIOS与UEFI均可引导的U盘)
- 【综合类型第 26 篇】WebStorm 2019.2.2 下载、安装教程
- html多张图片合在一块,多张照片怎么拼在一起?10张以上多图拼图方法 超简单! (全文)...
- 医疗在线质控系统 资料收集
- 调用ArcGIS Server的GP服务,显示No JSON object could be decoded要怎么解决?
- Pyinstaller Pmw