一道挺有意思的逻辑题

房间里有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-

 

 

应该还有更简单的算法

posted on 2012-10-23 10:54  程序猿_哲  阅读(3661)  评论(8编辑  收藏  举报