在 博客园看到的这个问题,也想做一下。题目是这样的

房间里有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盏电灯相关推荐

  1. 转载:一道逻辑题 房间里有100盏电灯

    转自:程序猿_哲 一道挺有意思的逻辑题 房间里有100盏电灯,编号为1,2,3--100,每盏灯上有一个按钮,初始时灯全都是关的.        编好号的100位同学由房间外依次走进去,将自己编号的倍 ...

  2. “房间里有100个人,每人都有100元钱,每轮每人要拿一元钱随机给另一个人”最后分布的python结果

    下午看到了这个问题,一开始直觉当然是觉得每个人的期望都是一样的,大家都是公平的,最后肯定是差不多. 这就是直觉,而在统计学和随机过程的世界里,直觉往往是错误的. 我们用python仿真一下这个过程. ...

  3. 一道逻辑题 - 我拿走了哪个数

    原文链接:http://www.cnblogs.com/baiyanhuang/archive/2010/06/23/1763981.html 有 1 到 10000 共 10000 个数,如果我从中 ...

  4. Interview QA - 房间里有三盏灯,屋里有三个开关分别控制这三盏灯。如何只进入房间一次就知道哪一个开关控制哪一盏灯?

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 先进入有 ...

  5. 【面试题】-100盏灯

    一道挺有意思的逻辑题 房间里有100盏电灯,编号为1,2,3--100,每盏灯上有一个按钮,初始时灯全都是关的.        编好号的100位同学由房间外依次走进去,将自己编号的倍数的灯的按钮全部按 ...

  6. 100盏灯开关的问题

    房间里有100盏电灯,编号为1,2,3--100,每盏灯上有一个按钮,初始时灯全都是关的.编好号的100位同学由房间外依次走进去,将自己编号的倍数的灯的按钮全部按一次,例如第一位同学把编号是1的倍数的 ...

  7. JAVA大厅有100盏灯_由100盏灯想到的(一)

    大厅里有100盏灯,每盏灯都编了号码,分别为1-100.每盏灯由一个开关来控制.(开关按一下,灯亮,再按一下灯灭.开关的编号与被控制的灯相同.)开始时,灯是全灭的.现在按照以下规则按动开关. 第一次, ...

  8. 五年级数学:100盏灯问题

    题目: 一间屋子里有100盏灯排成一行,按从左到右的顺序编上号1.2.3.4.5--99.100,每盏灯都有一个开关,开始全都关着,把100个学生排在后面,第1个学生把1的倍数的灯全都拉一下,第2个同 ...

  9. 面试题-100盏灯问题

    题目 一间屋子里有100盏灯排成一行,按从左至右的顺序编号1.2.3.4.5-99.100,每盏灯都有一个开关,开始全部都关着,现有100个学生,第1个学生把1的倍数的灯全部拉一下,第2个学生把2的倍 ...

最新文章

  1. linux除了eeprom其他的保存方法,linux的EEPROM的读写控制.doc
  2. 程序(进程)内存分布 解析
  3. 企业网站做SEO优化必走的三条路线,希望新人前方不要右转
  4. swoole process进程 多分发
  5. 2015年百度一面试题
  6. boost asio 异步实现tcp通讯
  7. html5/css3响应式页面开发总结
  8. python修改excel后打印_python 处理excel并打印excel
  9. Tensorflow深度学习应用(进阶篇)-回归(函数拟合训练)-可视化
  10. _04媒体文件的读取
  11. html php交互json 结果集,基于HTML模板和JSON数据的JavaScript交互(移动端)
  12. sklearn 决策树例子_sklearn CART决策树分类
  13. IOS 项目性能优化
  14. Ubuntu安装opencv的扩展模块-viz模块
  15. pycharm 文件名不同颜色所代表的含义
  16. 设置WINRE的硬盘启动
  17. 【技术宅小伙】Git版本控制系统的使用
  18. 硬件断点和软件断点的区别
  19. c++ 数据结构 软件压缩/解压缩软件Szip(Huffman算法及应用)
  20. 数字IC手撕代码-流水握手(利用握手解决流水线断流、反压问题)

热门文章

  1. 5月30日第壹简报,星期一,农历五月初一
  2. ZPL 打印条码、二维码及小票(中文/汉字),生成条码、二维码图片【Asp.Net】-含示例代码
  3. ajax——请求消息(request)和响应消息(response)
  4. 结婚5年又发现了一场爱情 感人
  5. 制作双启动(传统BIOS与UEFI均可引导的U盘)
  6. 【综合类型第 26 篇】WebStorm 2019.2.2 下载、安装教程
  7. html多张图片合在一块,多张照片怎么拼在一起?10张以上多图拼图方法 超简单! (全文)...
  8. 医疗在线质控系统 资料收集
  9. 调用ArcGIS Server的GP服务,显示No JSON object could be decoded要怎么解决?
  10. Pyinstaller Pmw