例:開燈問題
有n盞燈,編號為1~n。第1個人把所有燈打開,第2個人按下所有編號為2的倍數的開關(這些燈將被關掉),第3個人按下所有編號為3的倍數的開關(其中關掉的燈將被打開,開著的燈將被關閉),依次類推。一共有k個人,問最後有哪些燈開著?輸入:n和k,輸出開著的等的編號。k<=n<=1000。
樣例輸入:7 3
樣例輸出:1 5 6 7
解:開一個足夠大的數組,模擬整個過程即可~
Code:
#include#include #define MAX 1000+10 int a[MAX]; int main() { int i, j, n, k; memset(a, 0, sizeof(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]; for(i = 1; i <= n; i++) if(a[i]) { if(i == n) printf("%d\n", i); else printf("%d ", i); } return 0; }