开灯问题

描述

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

输入
输入一组数据:n和k
输出
输出开着的灯编号
样例输入
7 3
样例输出
1 5 6 7
 1 #include <stdio.h> 
 2 #include <string.h>
 3 
 4 int main(){
 5     int n;
 6     int k;
 7     int flag[1001];
 8     int i;
 9     int j;
10     
11     scanf("%d%d",&n,&k);
12     memset(flag,0,sizeof(int)*1001);
13     
14     for(i=1;i<=k;i++){
15         for(j=1;j<=n;j++){
16             if(j%i==0){
17                 if(flag[j-1]==0)
18                     flag[j-1]=1;
19                     
20                 else
21                     flag[j-1]=0;
22             }
23         }
24     }
25     
26     for(i=0;i<n;i++){
27         if(flag[i]==1){
28             printf("%d",i+1);
29             flag[i]=0;
30             break;
31         }
32     }
33     
34     for(i=0;i<n;i++){
35         if(flag[i]==1)
36             printf(" %d",i+1);
37     }
38     
39     printf("\n");
40     
41     return 0;
42 }

 

posted @ 2014-11-14 15:22  zqxLonely  阅读(172)  评论(0编辑  收藏  举报