開燈問題 P39
阿新 • • 發佈:2018-12-10
有n盞燈,編號1~n 。第一個人把所有燈點亮 ,第2個人按下所有編號為2的倍數的燈開關,第3人按編號為3的燈的倍數的燈的開關,依次k個人按下開關(其中關的燈被開啟,開的燈被熄滅),求最後哪些燈開著?k<=n<=1000。
【分析】
用陣列直接模擬操作即可。
#include<stdio.h> #include<string.h> const int maxn=1010; int a[maxn]; int main() { int n,k,first=1; scanf("%d%d",&n,&k); memset(a,0,sizeof(a)); for(int i=1;i<=k;++i) { for(int j=1;j<=n;++j) { if(j%i==0) a[j]=!a[j]; } } for(int i=1;i<=n;++i) { if(a[i]) { if(first) first=0; else printf(" "); printf("%d",i); } } printf("\n"); return 0; }