黑马程序员技术交流社区

标题: 一个经典的开灯算法 [打印本页]

作者: ancheng    时间: 2016-9-16 12:33
标题: 一个经典的开灯算法
[Java] 纯文本查看 复制代码
import java.util.Arrays;
import java.util.Scanner;

/*
* 开灯问题:
*         有n盏灯,编号为1-n。第1个人把所有的灯都打开,第2个人按下所有编号为2的倍数的开关(这些灯将被
* 关掉),第3个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关掉),以此类推,
* 一共有k个人,问最后有哪些等开着?输入n和k,输出开着的灯的编号。k<<n<<100.
*/
public class Main {

        private static Scanner sc;

        public static void main(String[] args) {

                sc = new Scanner(System.in);
                boolean first = true;
                int n = sc.nextInt();
                int k = sc.nextInt();

                int[] a = new int[n + 1];
                Arrays.fill(a, 0);
               
                for (int i = 1; i <= k; i++) {
                        for (int j = 1; j <= n; j++) {
                                if (j % i == 0) {
                                        a[j] = ~a[j];
                                }
                        }
                }
               
       
                for (int i = 1; i <= n; i++) {
                        if (a != 0) {
                                if (first) {
                                        first = false;
                                } else {
                                        System.out.print(" ");
                                }
                                System.out.print(i);
                        }
                }

        }

}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2