開燈問題

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

樣例輸入:7 3

樣例輸出:1 5 6 7

#include<iostream>
#include<string>
using namespace std;
#define MAXN 1000+10
int a[MAXN];
int main()
{
	int i, j, n, k, first = 1;
	memset(a, 0, sizeof(a));//把數組a清零
	cin>>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(first) first = 0;//輸出時第一個變量前不應該有空格
			else cout<<" ";
			cout<<i;
		}
		cout<<endl;
		return 0;
} 

題目中如果燈的數量和人的數量相等,則題意就爲“輸出1~n的完全平方數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章