題:
大廳裏有100盞燈,每盞燈都編了號碼,分別爲1-100。每盞燈由一個開關來控制。(開關按一下,燈亮,再按一下燈滅。開關的編號與被控制的燈相同。)開始時,燈是全滅的。現在按照以下規則按動開關。
第一次,將所有的燈點亮。
第二次,將所有2的倍數的開關按一下。
第三次,將所有3的倍數的開關按一下。
以此類推。第N次,將所有N的倍數的開關按一下。
問:
1、第100次按完以後,大廳裏還有幾盞燈是亮的。
2、如果燈的數量跟要操作的次數是可變的呢?
結果:
源碼:
public class Light {
/*
* 燈的狀態
* 0--滅
* 1--亮
*/
private int state=0;//默認是關的狀態
public int getState() {
return state;
}
public void setState(int state) {
this.state = state;
}
}
/**
* 題: <br>
* 大廳裏有100盞燈,每盞燈都編了號碼,分別爲1-100。每盞燈由一個開關來控制。(開關按一下,燈亮,再按一下燈滅。開關的編號與被控制的燈相同。)
* 開始時,燈是全滅的。現在按照以下規則按動開關。 第一次,將所有的燈點亮。 第二次,將所有2的倍數的開關按一下。 第三次,將所有3的倍數的開關按一下。
* 以此類推。第N次,將所有N的倍數的開關按一下。 <br>
* 問 : <br>
* 1、第100次按完以後,大廳裏還有幾盞燈是亮的。 <br>
* 2、如果燈的數量跟要操作的次數是可變的呢?
*
* @author Smilexs
*
*/
public class Test {
private Light[] light = null;
/**
* 初始化燈對象
*/
public Test(int N) {
light = new Light[N];// 初始化N盞燈
for (int i = 0; i < N; i++) {
light[i] = new Light();
}
}
/**
* 對燈進行操作
* @param n--操作次數
*/
public void operate(int n){
//i--第i次
for (int i = 1; i <=n; i++) {
//j--第j盞燈
for (int j = 1; j <=light.length; j++) {
if(j%i==0){
light[j-1].setState((light[j-1].getState()+1)%2);//0-->1,1-->0
}
}
}
}
public Light[] getLights(){
return light;
}
public static void main(String[] args) {
System.out.println("燈的狀態:0--> 關 | 1-->開");
Test test = new Test(100);//100盞燈
test.operate(100);//操作100次
Light[] lights = test.getLights();
for (int i = 0; i < lights.length; i++) {
System.out.println("第"+(i+1)+"盞燈的狀態:"+lights[i].getState());
}
}
}