開燈問題

描述
有n盞燈,編號爲1~n,第1個人把所有燈打開,第2個人按下所有編號爲2 的倍數的開關(這些燈將被關掉),第3 個人按下所有編號爲3的倍數的開關(其中關掉的燈將被打開,開着的燈將被關閉),依此類推。一共有k個人,問最後有哪些燈開着?輸入:n和k,輸出開着的燈編號。k≤n≤1000

時間限制:3000 ms | 內存限制:65535 KB
難度:1

輸入
輸入一組數據:n和k
輸出
輸出開着的燈編號
樣例輸入
7 3
樣例輸出
1 5 6 7

http://www.cnblogs.com/shineqiujuan/archive/2009/05/15/1457178.html

#include <iostream>
#include <cstring>

using namespace std;
static int a[1000];  //全局變量放在數據區,可以開的更大 局部變量存放在棧區,
// 動態變量存放在堆區,函數代碼放在代碼區  http://www.cnblogs.com/shineqiujuan/archive/2009/05/15/1457178.html
int main() {
    memset(a,0,sizeof(a));  //在頭文件cstring中定義,數組最好初始化
    int m,n,i,j;
    int flag=1;  //判斷首個元素,不輸出空格
    cin>>m>>n;
    for(i=1 ; i<=n ; i++) //n人,依次進入
        for(j=1;j<=m;j++)  //m盞燈,依次進行操作
            if(j%i == 0) 
                a[j] = !a[j];
    for(i=1; i<=m; i++)  //輸出,第一個元素前不留空格
        if(a[i])
        {
            if(flag)
                flag=0;
            else
                cout<<" ";
            cout << i;
        }
    cout<<endl;
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章