开灯问题

描述

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

 
输入
输入一组数据:n和k
输出
输出开着的灯编号
样例输入
7 3
样例输出
1 5 6 7

 1 import java.util.Arrays;
 2 import java.util.Scanner;
 3 
 4 public class Main {
 5     public static void main(String[] args) {
 6         Scanner scanner=new Scanner(System.in);
 7         int n;
 8         int k;
 9         int i;
10         int flag[]=new int[1001];
11         int j;
12         
13         n=scanner.nextInt();
14         k=scanner.nextInt();
15         
16         for(i=1;i<=k;i++){
17             for(j=i;j<=n;j+=i){
18                 if(flag[j]==0)
19                     flag[j]=1;
20                 
21                 else
22                     flag[j]=0;
23             }
24         }
25         
26         for(i=1;i<=n;i++){
27             if(flag[i]==1)
28                 System.out.print(i+" ");
29         }
30         
31         System.out.println();
32     }    
33 }
 
原文地址:https://www.cnblogs.com/zqxLonely/p/4131755.html