1. 程式人生 > >開燈問題

開燈問題

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; }

開燈問題