一道挺有意思的逻辑题
房间里有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-
应该还有更简单的算法