开灯问题
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 + " "); } } } }