一道挺有意思的邏輯題
房間里有100盞電燈,編號為1,2,3……100,每盞燈上有一個按鈕,初始時燈全都是關的。
編好號的100位同學由房間外依次走進去,將自己編號的倍數的燈的按鈕全部按一次,例如第一位同學把編號是1的倍數的燈的按鈕按一下(此時100盞燈全亮),第二位同學把編號是2的倍數的燈的按鈕按一下(此時只有50盞燈亮着,50盞被這個人按滅了)……第100位同學把編號是100的倍數的燈(即編號為100的燈)的按鈕按一下,請問依次走完后,還有多少盞燈亮着?
從要做淡定姐的博客上看到的這個邏輯題,感覺很有意思,就說那程序完成下,本來一個很簡單的東西結果用了半個多小時才寫出來,真是慚愧。。。
public class test { public static void main(String args[]) { int[] lights = new int[100]; int[] users = new int[100]; int[] result = new int[100]; for (int i = 1; i <= 100; i++) { lights[i - 1] = i; users[i - 1] = i; } for (int i = 0; i < 100; i++) { int user = users[i]; for (int j = 0; j < 100; j++) { int light = lights[j]; if (light % user == 0) { if (result[j] == 0) { result[j] = 1; } else { result[j] = 0; } } } for (int e = 0; e < 100; e++) { if (result[e] == 1) { System.out.print((e + 1) + "-"); } } System.out.println(); } } }
1-4-9-16-25-36-49-64-81-100-
應該還有更簡單的算法