劉汝佳演算法筆記:開燈問題
阿新 • • 發佈:2019-02-02
題目描述:
有n盞燈,編號為1-n,第一個人把所有的燈開啟,第二個人按下所有編號為2的倍數的燈(這些燈將會被關掉),第三個人按下所有編號為3的倍數的燈(其中關掉的燈將會被開啟,開啟的等將會被關掉),依次類推,一共有k個人,問最後又那些燈開著?(輸入n和k,輸出開著的燈的編號.k<=n<=1000).
樣例輸入:
7 3
樣例輸出:
1 5 6 7
程式碼:
#include<stdio.h> #include<string.h> #define maxn 1010 int a[maxn]; int main() { int n, k, first=1; int i,j; memset(a, 0,sizeof(a));//把陣列a清零 scanf("%d%d",&n,&k); for(i=1; i<=k; i++) { for(j=1; j<=n; j++) { if(j%i==0) a[j]=!a[j];//如果燈的編號%人的編號==0,則開的燈關了,關的燈開了 } } for(i=1; i<=n; i++) { if(a[i]) { if(first) { first=0; } else { printf(" "); } printf("%d",i); } } printf("\n"); return 0; }