开灯问题

import java.util.Scanner;

/**
 * 开灯问题:
 * 有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2 的倍数的开关(这些灯将被关掉),
 * 第3 个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依此类推。
 * 一共有k个人,问最后有哪些灯开着?输入:n和k,输出开着的灯编号。k≤n≤1000
 * 
 * 输入n=3,k=7;
 * 南阳oj77  71  252
 */
public class Main {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		int n, k;
		n = sc.nextInt();
		k = sc.nextInt();
		
		int[] arr = new int[n+1];
		
		for(int i=0; i<=n; i++) {
			arr[i] = i;//全开灯
		}
		
		for(int j=2; j<=k; j++) {
			for(int i=1; i<=n; i++) {
				if(i%j==0) {//大数对小数取摸
					if(arr[i]!=0) {
						arr[i] = 0;//关灯置0
					}else {
						arr[i] = i;
					}
				}
			}
		}
		
		//输出--1就输出
		for(int i=1; i<=n; i++) {
			if(arr[i]!=0) {//输出还开着的灯
				System.out.print(i + " ");
			}
		}
		
	}
}

  

原文地址:https://www.cnblogs.com/zhaohuan1996/p/8832656.html