如下是在網上看到的一道題目: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); } }