信息学奥赛一本通 1109:开关灯 | OpenJudge NOI 1.5 31:开关灯
生活随笔
收集整理的這篇文章主要介紹了
信息学奥赛一本通 1109:开关灯 | OpenJudge NOI 1.5 31:开关灯
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
【題目鏈接】
ybt 1109:開(kāi)關(guān)燈
OpenJudge NOI 1.5 31:開(kāi)關(guān)燈
【題目考點(diǎn)】
1. 模擬
2. 循環(huán)、數(shù)組
3. 用逗號(hào)分隔輸出
設(shè)標(biāo)志位:isFirst,表示現(xiàn)在輸出的是否是第一個(gè)元素。
- 如果現(xiàn)在要輸出第一個(gè)元素,不輸出逗號(hào),將isFirst設(shè)為false。
- 如果現(xiàn)在不輸出第一個(gè)元素,輸出逗號(hào)
【思路及題解代碼】
解法1:用數(shù)組模擬
- 設(shè)數(shù)組a,a[i]表示第i號(hào)燈是否亮
- 模擬操作過(guò)程,第1個(gè)人改變1倍數(shù)的燈的狀態(tài),第2個(gè)人改變2倍數(shù)的燈的狀態(tài)…直到第m個(gè)人操作完畢。
- 遍歷數(shù)組a,輸出關(guān)閉著的燈的編號(hào)。
解法2:不用數(shù)組,考察每盞燈被操作的次數(shù)
- 遍歷每個(gè)燈,設(shè)燈的編號(hào)為i,那么只有編號(hào)為i的因數(shù)的人才會(huì)操作這盞燈。
如:6號(hào)燈,會(huì)被編號(hào)為1,2,3的人操作,而這三個(gè)數(shù)是6的因數(shù)(6能整除的數(shù)字)。 - 所有燈初始是亮著的。統(tǒng)計(jì)燈被操作的次數(shù),如被操作奇數(shù)次,則最后燈是滅著的,那么最后關(guān)閉著的燈的數(shù)量加1。如被操作偶數(shù)次,燈是亮著的。
- 統(tǒng)計(jì)操作次數(shù),操作次數(shù)是燈編號(hào)i與最大操作次數(shù)m中較小的值。比如6號(hào)燈可以由1,2,3,6號(hào)人操作,但如果一共只有4個(gè)人,則只能被1,2,3號(hào)人操作,被操作3次。
解法3:用標(biāo)志位記錄一盞燈的亮暗狀態(tài)
思路來(lái)自網(wǎng)友m0_64531207
#include <bits/stdc++.h> using namespace std; int main() {int n, m;bool lightOn;//標(biāo)志位 燈是否亮著 cin >> n >> m;cout << 1;//1號(hào)燈一定是滅著的 for(int i = 2; i <= n; i++)//第i盞燈 {lightOn = true;//一開(kāi)始燈是亮著的 for(int j = 1; j <= m && j <= i; j++)//第j個(gè)人 if(i % j == 0)//如果燈號(hào)是人編號(hào)的倍數(shù) lightOn = !lightOn;//改變燈的亮暗狀態(tài) if(lightOn == false)//如果第i盞燈滅著 cout << ',' << i;}return 0; }總結(jié)
以上是生活随笔為你收集整理的信息学奥赛一本通 1109:开关灯 | OpenJudge NOI 1.5 31:开关灯的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 信息学奥赛一本通(1254:走出迷宫)
- 下一篇: 信息学奥赛一本通 1119:矩阵交换行