首页 > 学院 > 开发设计 > 正文

开灯问题

2019-11-08 01:40:35
字体:
来源:转载
供稿:网友

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

输入样例:

7 3

输出样例:

1 5 6 7

#include <stdio.h>#define max 10000int s[max]={1};int main(){int n,k;scanf("%d %d",&n,&k);for(int i=2;i<=k;i++){for(int j=1;j<=n;j++){if(j%i==0){if(s[j]==0){s[j]=s[j]+1;}else{s[j]=s[j]-1;}}}}for(int x=1;x<=n;x++){if(s[x]==0){PRintf("%d ",x);}}    printf("/n");    return 0; } 

这个问题的难点在于在第二个人结束任务后,之后的人如何在之前的前提下来进行执行后的判断。这里我所用的是以0和1表示灯的开关状态,当判断能够被整除后判断灯的状态,如果原先是亮的那么减去1,否则加上1。这样就方便的解决了问题。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表