开灯问题
来源:互联网 发布:鹰身女郎知乎 编辑:程序博客网 时间:2024/05/29 09:40
有n盏灯,编号为1-n。第1个人把所有的灯打开,第二个人按下所有编号为2的倍数的开关(这些灯被关掉),第3个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,打开的灯将被关闭),以此类推。一共有k个人,问最后有哪些灯开着?输入:n和k,输出开着的灯的编号。K≤n≤1000。
输入n和k。
输出开着灯的编号。
样例输入:
7 3
样例输出:
1 5 6 7
第一眼或许看不出什么结果(大佬们除外),至少我想了很久。 这时,我们布仿可以画一张表(跟据样例)。
灯数 1 2 3 4 5 6 7
第一个人 o o o o o o o o=开
第二个人 o + o + o + o +=关
第三个人 o + + + o o o
从表中可以轻松的推断出灯被按的次数为 偶数 时,则为 关; 奇数时,则为 开。
因此代码可为:
#include<stdio.h>
int main()
{
int n,i,j,k,l;
scanf("%d%d",&n,&k);
for(i=1;i<=n;i++)
{
l=0; //初始,灯还没被按。
for(j=1;j<=k;j++)
{
if(i%j==0)l++; //灯被按了,就加一次
}
if(l%2==1)printf("%d ",i); //次数奇数时,输出灯号
}
return 0;
}
总结:通过这道题,我认为在解决C语言问题时,找到其中的数学关系很重要,新手需要学习这样的意识。
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 10-14-am-C++页游服务端面试题
- 3-java学习笔记
- Quartz教程 第4课 Trigger详解
- 下拉菜单查询
- Codeforces883E-Field of Wonders
- 开灯问题
- day16
- CentOS6.5 MySQL-读写分离
- SSH模拟试题
- 高德地图使用学习过程
- Android控件的透明显示
- Spring MVC—数据绑定机制,数据转换,数据格式化配置,数据校验
- 简单实现接口自动化测试(基于python+unittest)
- 那些最小化centos7安装图形化界面的坑