您的位置:首页 > 其它

大厅里有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 + " ");
}
}
}
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  练练手
相关文章推荐