大厅里有100盏灯,每盏灯都编了号码,分别为1-100。每盏灯由一个开关来控制。
2013-10-14 15:17
375 查看
小弟学识浅薄,欢迎各位评论指点,谢谢!
<pre name="code" class="html">import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; /* 大厅里有100盏灯,每盏灯都编了号码,分别为1-100。每盏灯由一个开关来控制。(开关按一下,灯亮,再按一下灯灭。开关的编号与被控制的灯相同。)开始时,灯是全灭的。现在按照以下规则按动开关。 第一次,将所有的灯点亮。 第二次,将所有2的倍数的开关按一下。 第三次,将所有3的倍数的开关按一下。 以此类推。第N次,将所有N的倍数的开关按一下。 问第N次(N大于等于2,且小于等于100)按完以后,大厅里还有几盏灯是亮的。 */ public class TurnLight { private static int lightNum = 100; private static int ON = 1; private static int OFF = 0; private ArrayList list = null; public static void main(String[] args) throws IOException { int n = 0, onLight; try { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); n = Integer.parseInt(br.readLine()); } catch (IOException ie) { ie.printStackTrace(); } TurnLight tl = new TurnLight(); tl.list = new ArrayList(); tl.initList(); tl.turnMethod(n); onLight = tl.count(); System.out.println("经过" + n + "次按开关,大厅里还有" + onLight + "盏灯亮着"); tl.printLightNo(); } private void initList() { for (int i = 0; i < 100; i++) { list.add(ON); } } private void turnMethod(int n) { if (n > 100 || n < 2) return; else { for (int j = 2; j <= n; j++) { for (int i = j; i < lightNum; i = i + j) { if (list.get(i).equals(ON)) { list.set(i, OFF); } else if (list.get(i).equals(OFF)) { list.set(i, ON); } else continue; } } } } private int count() { int onNum = 0; for (int i = 0; i < lightNum; i++) { if (list.get(i).equals(ON)) onNum++; } return onNum; } private void printLightNo() { System.out.println("亮着的灯的编号:"); for (int i = 0; i < 100; i++) { if (list.get(i).equals(ON)) { System.out.println(i + 1 + " "); } } } }
相关文章推荐
- To_10_r_100_8_1---判断出三盏灯分别是由哪个开关控制的
- 有两个房间,一间房里有三盏灯,另一间房有控制着三盏灯的三个开关, 这两个房间是分割开的,从一间里不能看到另一间的情况。 现在要求受训者分别进这两房间一次,然后判断出这三盏灯分别是由哪个开关控制的。
- 150盏亮着的电灯,各有一个拉线开关控制,编号为1~150 将编号为1~150倍数的灯,依次拉一下 问:拉完后亮着的灯数为几盏? 哪盏灯被拉的最多?
- Interview Q&A - 房间里有三盏灯,屋里有三个开关分别控制这三盏灯。如何只进入房间一次就知道哪一个开关控制哪一盏灯?
- android 保存具有不同前缀的同一号码分别为A和B,用其中一个呼叫,通话记录一直显示另一个联系人名字的问题
- java解决100盏灯,初始时都是关闭的。现在开始轮回100次,每次轮回是如是该次的倍数按一下开关。问第100次之后那几盏灯亮着?
- FPGA作业3:用一个开关控制整组LED灯的亮灭
- php之用一个常量控制多个开关状态
- 数字电路设计--用3个开关控制一个电灯
- 每天三道冲刺工作--有两个房间,一间房里有三盏灯,另一间房有控制着三盏灯的三个开关
- 如何做一个控制对象显示和隐藏的开关
- 双控开关的原理-----两个开关独立控制一个灯泡,装修会用得的哦
- 哪个开关控制哪盏灯
- 每日一题:那个开关控制那盏灯?
- 如何控制同一一个订单类型的使用多个号码范围
- 每日一题:那个开关控制那盏灯?
- 数字电路:设计《三个开关控制一个灯的电路》
- 2.我的第一个JSP代码:java控制输出1-100之和,say hello并写一个简单的表格
- android 保存具有不同前缀的同一号码分别为A和B,用其中一个呼叫,通话记录一直显示另一个联系人名字的问题
- 智力题:关于进入房间一次,判断哪个开关控制哪盏灯的问题