例3-1 开灯问题

问题:有n盏灯,编号为1-n。第1个人把所有的灯都打开,第2个人按下所有编号为2的倍数灯的开关,第3个人按下所有编号为3的倍数灯的开关,以此类推。一共有k个人,问最后哪些灯开着?输入n和k,输出最后亮着的灯的编号。k<=n<=1000;

样例输入:7 3

样例输出:1 5 6 7

 

分析:感觉这个问题还是比较容易的,假如有初学者读到,可以自己好好想想

 

代码如下:

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 #define MAX_NUM    100
 5 int lgt_sta[MAX_NUM]; 
 6 
 7 int main(void)
 8 {
 9     int n = 0;     //the number of lights
10     int k = 0;    //the number of people
11     int i = 0;
12     int j = 0;
13     memset(lgt_sta, 0x00, sizeof(lgt_sta));  //初始状态为0代表都开着,第1个人再不考虑
14 
15     printf("enter the number of lights:");
16     scanf("%d", &n);
17     printf("enter the number of people:");
18     scanf("%d", &k);
19     for (i = 2; i <= k; i++)   //从第2个人开始处理
20     {    
21         for (j = 1; j <= n; j++)
22         {
23             if (j % i == 0)
24             {
25                 lgt_sta[j-1] = !lgt_sta[j-1];  //开关状态的转化
26             }
27         }
28     }
29     for (i = 0; i < n; i++)  //看看数组里面是什么
30     {    
31         printf("%d ", lgt_sta[i]);
32     }
33     printf("\n");
34     
35     for (i = 0; i < n; i++)
36     {    
37         if (!lgt_sta[i])
38         {
39             printf("%d ", i+1);
40         }
41     }
42     printf("\n");
43 
44     return 0;
45 }
posted on 2014-07-21 20:33  龙潜入海  阅读(89)  评论(0)    收藏  举报