【题目链接】

ybt 1109:开关灯
OpenJudge NOI 1.5 31:开关灯

【题目考点】

1. 模拟

2. 循环、数组

3. 用逗号分隔输出

设标志位:isFirst,表示现在输出的是否是第一个元素。

  • 如果现在要输出第一个元素,不输出逗号,将isFirst设为false。
  • 如果现在不输出第一个元素,输出逗号
//例:用逗号分隔输出数组a的n个元素
bool isFirst = true;
for(int i = 0; i < n; ++i)
{if(isFirst)isFirst = false;elsecout << ',';cout << a[i];
}

【思路及题解代码】

解法1:用数组模拟

  • 设数组a,a[i]表示第i号灯是否亮
  • 模拟操作过程,第1个人改变1倍数的灯的状态,第2个人改变2倍数的灯的状态…直到第m个人操作完毕。
  • 遍历数组a,输出关闭着的灯的编号。
#include <bits/stdc++.h>
using namespace std;
int main()
{bool a[5005] = {};//a[i]表示第i号灯是否亮。第1个人将灯全部关闭,因此将所有元素初始化为false。 int n, m;//n盏灯,m个人 cin >> n >> m;for(int i = 2; i <= m; ++i)//i为人编号,从第2个人开始操作 {for(int j = 1; j <= n; ++j)//j为灯编号,遍历所有的灯 {if (j % i == 0)//如果灯编号是人编号的倍数 {//以下这一段可以写为:a[j] = a[j] ? false : true;if(a[j])//如果灯开着,则关上。如果灯关着,则打开。a[j] = false;elsea[j] = true;}}}bool isFirst = true;//是否是第一个要输出的数字 for(int j = 1; j <= n; ++j)//遍历所有灯 {if(a[j] == false)//如果第j盏灯关着 {if (isFirst)isFirst = false;elsecout << ',';cout << j;}}return 0;
}

解法2:不用数组,考察每盏灯被操作的次数

  • 遍历每个灯,设灯的编号为i,那么只有编号为i的因数的人才会操作这盏灯。
    如:6号灯,会被编号为1,2,3的人操作,而这三个数是6的因数(6能整除的数字)。
  • 所有灯初始是亮着的。统计灯被操作的次数,如被操作奇数次,则最后灯是灭着的,那么最后关闭着的灯的数量加1。如被操作偶数次,灯是亮着的。
  • 统计操作次数,操作次数是灯编号i与最大操作次数m中较小的值。比如6号灯可以由1,2,3,6号人操作,但如果一共只有4个人,则只能被1,2,3号人操作,被操作3次。
#include <bits/stdc++.h>
using namespace std;
int main()
{int n, m;cin >> n >> m;//n盏灯 m个人 cout << 1;//1号灯只被第一个人操作,一定是关闭的 for(int i = 2; i <= n; ++i)//灯i会被编号为"i的因数"的人操作 {int c = 0;//计数,计该灯被操作多少次 for(int j = 1;j <= m && j <= i; ++j)//j:人编号。看j从1~m或i(m,i取较小的值),有几个数是i的因数,那么该灯就被操作多少次。 {if(i % j == 0)c++;}if(c % 2 == 1)//灯最初是亮着的,进行奇数次操作后,灯会灭 cout << ',' << i;}return 0;
}

解法3:用标志位记录一盏灯的亮暗状态

思路来自网友m0_64531207

#include <bits/stdc++.h>
using namespace std;
int main()
{int n, m;bool lightOn;//标志位 灯是否亮着 cin >> n >> m;cout << 1;//1号灯一定是灭着的 for(int i = 2; i <= n; i++)//第i盏灯 {lightOn = true;//一开始灯是亮着的 for(int j = 1; j <= m && j <= i; j++)//第j个人 if(i % j == 0)//如果灯号是人编号的倍数 lightOn = !lightOn;//改变灯的亮暗状态 if(lightOn == false)//如果第i盏灯灭着 cout << ',' << i;}return 0;
}

信息学奥赛一本通 1109:开关灯 | OpenJudge NOI 1.5 31:开关灯相关推荐

  1. 信息学奥赛一本通 1209:分数求和 | OpenJudge NOI 1.13 12:分数求和

    [题目链接] ybt 1209:分数求和 OpenJudge NOI 1.13 12:分数求和 [题目考点] 1. 求最大公约数 2. 求最小公倍数 [解题思路] 求最大公约数,可以用辗转相除法.具体 ...

  2. 信息学奥赛一本通 1294:Charm Bracelet | OpenJudge NOI 2.6 7113:Charm Bracelet | 洛谷 P2871

    [题目链接] ybt 1294:Charm Bracelet OpenJudge NOI 2.6 7113:Charm Bracelet 洛谷 P2871 [USACO07DEC]Charm Brac ...

  3. 信息学奥赛一本通 1145:字符串p型编码 | OpenJudge NOI 1.7 31:字符串p型编码

    [题目链接] ybt 1145:字符串p型编码 OpenJudge NOI 1.7 31:字符串p型编码 [题目考点] 1. 字符串处理 [解题思路] 遍历字符串,设置变量curNum表示当前关注的数 ...

  4. 信息学奥赛一本通 1278:【例9.22】复制书稿(book) | 洛谷 P1281 书的复制

    [题目链接] ybt 1278:[例9.22]复制书稿(book) 洛谷 P1281 书的复制 [题目考点] 1. 动态规划:线性动规 [解题思路] 该题可以抽象为:将由m个数字构成的序列分成k个子段 ...

  5. 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题

    第1章   快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章  素数 第 3 章  约数 第 4 章  同余问题 第 5 章  矩阵乘法 第 6 章 ...

  6. 信息学奥赛一本通 2021:【例4.6】最大公约数

    [题目链接] ybt 2021:[例4.6]最大公约数 [题目考点] 1. while循环 2. 求最大公约数 辗转相减法 辗转相除法 [解题思路] 解法1:枚举 取较小数字,从该数字的值开始从大到小 ...

  7. 信息学奥赛一本通(C++版) 刷题 记录

    总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...

  8. 信息学奥赛一本通在线提交地址

    信息学奥赛一本通 1 C++语言入门 1.1 综合 1.1.1 P1458 地球人口承载力估计 正确: 770 提交: 1794 比率: 42.92 % 1.1.2 P1686 Hello, Worl ...

  9. 信息学奥赛一本通 (C++)上机练习

    信息学奥赛一本通(C++)上机练习 此书为娃儿的第一本刷题书.娃儿现在四年级 ,希望他能坚持下来.特开贴加油 luogu: disangan223 第一部分 C++语言 第一章 C++语言入门 T10 ...

最新文章

  1. java只有值传递_面试官:为什么 Java 中只有值传递?
  2. 【Redis】6.Redis key通用指令以及数据库的通用操作
  3. HashCode和hashMap、hashTable
  4. linux中 在文件中写入一句话怎么写_shell文件处理笔记之插入文本到文件的方法...
  5. extern “C”的含义
  6. python入侵网站_入侵服务器简介_python信息安全实战_Python视频-51CTO学院
  7. 统计学习方法——机器学习和统计学习
  8. mysqlpump备份工具简单使用
  9. HR问“什么时间可以入职”,这样回答最保险!
  10. 灌篮青春完结篇----灌篮.青春
  11. uni-app 超好用的时间选择器组件(起止时间)
  12. 【无标题】学习贪吃蛇代码
  13. DQN paper 总结
  14. 无敌!阿里巴巴开源落地可实操项目:网约车+咚宝商城+英雄传说
  15. 投资人阎焱:为什么中国创业 成功率低于1%
  16. MZB01慢直播-如何循环直播录好的视频文件
  17. FreeBSD--如何最有效率的安装软件
  18. 操作系统-经典同步例题
  19. 西门子精智和精简面板区别_西门子精智面板6AV2124-0QC02-0AX1详细概述
  20. Docker部署neo4j

热门文章

  1. U3D的有限状态机系统
  2. wordpress 安装(亲身经历) 出现“Fatal error: Call to undefined function get_magic_quotes_gpc()”之后的解决方法...
  3. 基于json的jquery地区联动
  4. dnt 删除不良数据
  5. 获取指定路径下的所有文件
  6. 一文看懂用Python读取Excel数据
  7. 阿里预面:谈谈你对双亲委派机制的理解?这个名字有啥问题?如何打破?为啥双亲委派?...
  8. 避坑 | 早跟你说了不要写 hardcode!
  9. 花高价招来的阿里P8,我从他那里总结了8大硬核能力,4个经典案例,真香
  10. 面试官邪魅一笑:MySQL千万级别大表,你要如何优化?