开灯问题
2016-05-16 19:53
357 查看
问题简述:有N个灯(并编号1.2.3.4…..n),K个人。第一个人打开所有灯,第二个人按下2的倍数开关,第三个人按下3的倍数开关,以次类推。。。。问最后有哪些灯还是亮着的,
解析:只要解决如何表示灯的开与关,这个问题就基本上解决了,这里先灯默认为关,即0。再每次按下开关就执行一次a[j]=!a[j],看最后的状态就OK!
int main()
{
int n, k, first=1;
memset(a,0,sizeof(a)); //将数组a[1010]置零,即默认为关闭状态。
scanf(“%d%d”,&n,&k);
for(int i=1;i<=k;i++)
{
for(int j=1;j<=n;j++) if(j%i==0) a[j]=!a[j]; //a[j]=!a[j](1与0,翻转,1为开,0为关)
}
for(int i=1;i<=n;i++)
if(a[i])
{
if(first) first=0;
else printf(” “);
printf(“%d”,i);
}
printf(“\n”);
return 0;
}
小结:找到核心问题,明确表示方法,最后写出代码,OK!
解析:只要解决如何表示灯的开与关,这个问题就基本上解决了,这里先灯默认为关,即0。再每次按下开关就执行一次a[j]=!a[j],看最后的状态就OK!
include “stdio.h”
include “string.h”
int a[1010];int main()
{
int n, k, first=1;
memset(a,0,sizeof(a)); //将数组a[1010]置零,即默认为关闭状态。
scanf(“%d%d”,&n,&k);
for(int i=1;i<=k;i++)
{
for(int j=1;j<=n;j++) if(j%i==0) a[j]=!a[j]; //a[j]=!a[j](1与0,翻转,1为开,0为关)
}
for(int i=1;i<=n;i++)
if(a[i])
{
if(first) first=0;
else printf(” “);
printf(“%d”,i);
}
printf(“\n”);
return 0;
}
小结:找到核心问题,明确表示方法,最后写出代码,OK!
相关文章推荐
- 远程摄像头软件mjpg-streamer使用指南
- ANDROID STUDIO集成GENYMOTION模拟器
- 【GDOI2016Day1】第二题 最长公共子串
- leetcode.162. Find Peak Element
- vimtutor中文版
- Struts上传文件fileupload
- 推荐系统基础之一-简介
- JavaCAS操作
- [dp+数论]bzoj1004
- 学习心得 六 修改
- 数据库索引
- Sublime Text 3 绝对神器
- Android中EditText中的InputType
- hdoj 2055 An easy problem (单个字符)
- CSS 3 伪元素选择器
- iOS中直接使用Gif图片
- php中redis的安装
- 团体程序设计天梯赛-L3-004. 肿瘤诊断
- linux下常用文本编辑器的控制台启动命令
- [NOI2016模拟5.14]最长公共子序列