Java之面試題1

題:

大廳裏有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());
		}
	}

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章