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

NYOJ_77 開燈問題

pre targe stream 一個數 nyoj 推斷 geo i++ net

題目地址

分析:

用一個數組來保存每盞燈的操作的次數。推斷奇偶就可以推斷燈的狀態。

最後的輸出格式須要註意一下空格的位置,思路就是現輸出一個。剩下來的輸出在前面加一個空格。

空格用_表示:

1_3_5_7


代碼:

/*
有n盞燈,編號為1~n,第1個人把全部燈打開,
第2個人按下全部編號為2 的倍數的開關(這些燈將被關掉),
第3 個人按下全部編號為3的倍數的開關(當中關掉的燈將被打開,開著的燈將被關閉),依此類推。
一共同擁有k個人,問最後有哪些燈開著?
輸入:n和k。輸出開著的燈編號。k≤n≤1000
*/
#include<iostream>
using namespace std;
int main()
{
	int n,k;
	cin>>n>>k;
	int *a = new int[n]; //={0}; //每一盞燈被操作的次數 
	for(int i=0;i<n;i++)
		a[i]=0;
	for(int i=0;i<k;i++)
	{
		//i+1的倍數的燈被打開 a[j*(i+1)]
		for(int j=1;j*(i+1)<=n;j++) //考慮燈 
		{
			a[j*(i+1)-1]++;       //考慮燈在數組中的下標 
		}
	} 
	for(int j=0;j<n;j++)
		if(a[j]%2)
		 { 
		 	cout<<++j;  //第幾盞燈 正好j加一是下次循環的開始 
			for(;j<n;j++)
				if(a[j]%2) cout<<" "<<j+1;
			break;
		 }
	return 0;
}


NYOJ_77 開燈問題