算法竞赛入门经典的java实现之开灯问题->Demo17.java

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36737934/article/details/80191579

有n盏灯,编号为1~n。第1个人把所有灯打开,第二个人按下所有编号为2的倍数的开关(这些灯将被关掉),第三个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),以此类推,一共有k个人,问最后有哪些灯开着?输入n和k,输出开着的灯的编号。k<=n<=1000。

样例输入:7 3

样例输出:1 5 6 7

下面贴出源码:

package cn.zimo.algorithm;

import java.util.Scanner;

/**
 * 开灯问题
 * @author 子墨
 * @date 2018年4月27日 上午11:05:10
 */
public class Demo17 {
    public static void main(String[] args) {
        boolean[] b=new boolean[1000];
        int n,k;
        Scanner scan=new Scanner(System.in);
        n=scan.nextInt();
        k=scan.nextInt();
        for(int i=0;i<=n;i++) {
            b[i]=false;
        }
        for(int i=1;i<=k;i++) {
            for(int j=1;j<=n;j++) {
                if(j%i==0) {
                    if(b[j]==false) {
                        b[j]=true;
                    }else {
                        b[j]=false;
                    }
                }
            }
        }
        for(int i=1;i<=n;i++) {
            if(b[i]==true) {
                System.out.print(i+" ");
            }
        }
    }

}


猜你喜欢

转载自blog.csdn.net/qq_36737934/article/details/80191579