NYOJ_77 開燈問題
阿新 • • 發佈:2017-06-18
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 開燈問題