開燈問題
阿新 • • 發佈:2017-11-19
pan 關閉 打開 () 操作 rst 一個 def for
有n盞燈,編號為1~n,第一個人把所有燈打開,第二個人按下所有編號為2的倍數開關(這些燈將被關掉),第三個人按下所有編號為3的倍數的開關(其中關掉的燈將被打開,開著的燈將被關閉),一次類推,一共有k個人,問最後哪些燈開著?
輸入: 7 3
輸出 : 1 5 6 7
思路,用一個布爾數組去保存燈的開關狀態,為true時是開著的,false為關閉著的,然後做一次遍歷即可,詳情看代碼
#include<stdio.h> #include<string.h> #define maxn 1010 int a[maxn]; int main() { int n,k,first=1; memset(a,0,sizeof(a)); //清零數組 scanf("%d%d",&n,&k); //k個人對n盞燈進行操作 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; }
開燈問題