开灯问题
来源:互联网 发布:云计算技术 编辑:程序博客网 时间:2024/06/09 14:35
有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2 的倍数的开关(这些灯将被关掉),第3 个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依此类推。一共有k个人,问最后有哪些灯开着?输入:n和k,输出开着的灯编号。k≤n≤1000。
Input
输入n和k。k≤n≤1000。
Output
输出开着的灯编号。
Sample Input
7 3
Sample Output
1 5 6 7
本题算法思想:
用a[1],a[2],…,a[n]表示编号为1,2,3,…,n的灯是否开着;0表示关,1表示开。
代码:
#include<iostream>#include<stdio.h>#include<stdlib.h>#include<math.h>#include<algorithm>#include<string.h>using namespace std;#define MAXN 1000+10int a[MAXN];int main() { int n,k,i,j,first=1; while(scanf("%d%d",&n,&k)!=EOF) { memset(a,0,sizeof(a)); //一开始全部灯都是关闭的 for(i=1;i<=k;i++) //每到一个人,就遍历一遍灯 { for(j=1;j<=n;j++) { if(j%i==0) //因为是看当前灯的编号是否为第i个人的i倍,所以是判断j%i { a[j]=!a[j]; //在c语言里面是非零即真,!的意思是取反; 这里的意思将为0的数取为1,将不为1的数赋值为0 } } } for(i=1;i<=n;i++) { if(a[i]) //判断是否输出i值 { if(first) //判断是否输出空格 { first=0; printf("%d",i); } else { printf(" "); printf("%d",i); } } } printf("\n"); } return 0; }
阅读全文
0 0
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- JS中如何传递Event对象,兼容IE和FireFox
- 年总结
- 虚拟机类加载机制
- 邓敬雷:当今中国社会主要矛盾分析
- 创新工场深度学习暑期训练营 — 聊天机器人
- 开灯问题
- 阳虚阴虚怎么辩证
- Swift3-如何保证强制进入横屏模式
- PAT 乙级 1014
- Struts2 文件上传 下载
- Atitit it 互联网 软件牛人的博客列表
- Cookie/Session详解
- 用word发CSDN blog,免去插图片的烦恼
- 转发和重定向的比较