开灯问题
来源:互联网 发布:js向div中添加元素 编辑:程序博客网 时间:2024/05/22 02:11
描述
有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2 的倍数的开关(这些灯将被关掉),第3 个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依此类推。一共有k个人,问最后有哪些灯开着?输入:n和k,输出开着的灯编号。k≤n≤1000
样例输入
7 3
样例输出
有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2 的倍数的开关(这些灯将被关掉),第3 个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依此类推。一共有k个人,问最后有哪些灯开着?输入:n和k,输出开着的灯编号。k≤n≤1000
样例输入
7 3
样例输出
1 5 6 7
分析:用a[1],a[2],...........a[n]表示编号为1,2,3,4.........n的灯是否开着。模拟这些操作。
代码:
<pre name="code" class="cpp">#include<iostream>#include <cstring>using namespace std;int main(){//n盏灯,k个人 int a[100];int n,k,first=1;memset(a,0,sizeof(a));//这个函数在cstring中定义cin>>n>>k;for(int i=1;i<=k;i++)//i控制人数{for(int j=1;j<=n;j++)//j控制登数{if(j%i==0){a[j]=!a[j];//这里的目的是为了给a[j]赋真假值,a[j]为真表示灯亮,a[j]为假表示灯灭。}}}for(int i=1;i<=n;i++){if(a[i])//a[i]为真则输出,a[i]为假则跳过{if(first){first=0;}else cout<<" ";cout<<i;}}return 0;}
“memset(a,0,sizeof(a))”的作用是把数组清零。
此处的first是一个标志变量,可以表示当前要输出的变量是否为第一个,输出的第一个变量前不应有空格,但其他变量都要有。
0 0
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- Windows7下配置JMeter安装环境
- 7、撤销修改
- AndroidStudio导入项目总是不成功之终极解决方案
- GCD-两个网络请求同步问题
- linux下配置ipv6地址
- 开灯问题
- Spark 2.0介绍:从RDD API迁移到DataSet API
- Android中不同Activity之间的数据传递
- Android回调机制浅析
- iOS获取存储空间大小(总共/剩余)
- DetachedCriteria 的完整用法
- JAVA ActiveMQ消息发送和接收
- VMware 11安装Mac OS X 10.10
- java 时间日期的判定和时间的加减