有趣的Java編程題

如下是在網上看到的一道題目:java

大廳裏有100盞燈,每盞燈都編了號碼,分別爲1-100。每盞燈由一個開關來控制。(開關按一下,燈亮,再按一下燈滅。開關的編號與被控制的燈相同。)開始時,燈是全滅的。如今按照如下規則按動開關。
第一次,將全部的燈點亮。
第二次,將全部2的倍數的開關按一下。
第三次,將全部3的倍數的開關按一下。
以此類推。第N次,將全部N的倍數的開關按一下。
問第N次(N大於等於2,且小於等於100)按完之後,大廳裏還有幾盞燈是亮的。編程

 

請編程實現上面的邏輯,以N爲參數數組

個人思路以下:code

1,燈的狀態變化是什麼。燈的開關只有倆種狀態,非開即關。因此用一個變量定義一下開關狀態,我用數組的值A或B來定義燈的開關,其實我以爲用一個布爾值會更好。get

if(i%n==0){
	if(lamp[i]=="A"){
        lamp[i]="B";
}else {
	lamp[i]="A";
       }
}

2,燈的狀態如何變。第一次,全變。第二次,2的倍數變一次。第三次,3的倍數變一次。以此類推能夠得出:每一次,但凡是次數整數倍的都會變。因此我用取餘爲0來判斷是否進行變換。那麼,它的開關次數的逐次遞增用一個for循環來解決。input

for(int n=1;n<N+1;n++){
	for(int i=0;i<100;i++){
//the change of "A"and"B"means:lamp is open or close
	    if(i%n==0){
		   if(lamp[i]=="A"){
			lamp[i]="B";
		}else {
			lamp[i]="A";
		      }
		}
	}
}

3,在燈的變化結果已經出來時,就是統計最後開着的燈的數量。用判斷,累計。it

(PS:對於count有定義卻沒有初始化值,致使一直出錯卻找不到緣由,通常來講定義都有默認初始化的值,可是總有不肯定隱患發生,因此仍是要謹慎***)io

for(int i=0;i<100;i++){

		System.out.print(lamp[i]);
	if(lamp[i]=="A"){
//output the number of lamp how many is open
		count=count+1;
				
	}
			
}
System.out.println();
System.out.print("the number of open lamp is:"+count);

所有代碼顯示以下:for循環

import java.util.Scanner;

class Demo12{
public static void main(String[] args){
	change();
}
	public static void change(){
		//I have forget to initialize the value count,that make a false and I spend half an hour to find it.
		int count=0;
		int N;
		String[] lamp={"B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B"};
		
		//define the volue of N as the number of times
		System.out.println("please input an number:");
		Scanner key=new Scanner(System.in);
		N=key.nextInt();
		for(int n=1;n<N+1;n++){
			for(int i=0;i<100;i++){
			//the change of "A"and"B"means:lamp is open or close
				if(i%n==0){
					if(lamp[i]=="A"){
						lamp[i]="B";
					}else {
						lamp[i]="A";
							}
						}
					}
				}
		//output the situation of lamp
		for(int i=0;i<100;i++){
			
				System.out.print(lamp[i]);
			if(lamp[i]=="A"){
				//output the number of lamp how many is open
				count=count+1;
				
			}
			
		}
		System.out.println();
		System.out.print("the number of open lamp is:"+count);
	}

}

相關文章
相關標籤/搜索