最后亮的电灯数
2015-04-09 14:05
85 查看
题目
有n个灯排成一排,开始全部为灭。有n个学生,第一个学生把所有是1倍数的灯开关按一下(灯打开),此时所有灯都打开;第二个学生把所有是2倍数的灯按一下开关(开启变为关闭,关闭变为开启);第三个学生把所有是3 倍数的灯按一下……,以此内推,直到第n个同学把所有是n倍数的灯按一下开关。注:灯只有两种状态,开启和关闭,开启状态按一下可以转换为关闭状态,关闭状态按一下可以转换为开启状态。
解答
对于一个灯,无论按多少次开关,只要是按的开关总次数是奇数,那么这个灯最终就是开启状态;只要是按的开关总次数是偶数,那么这个灯最终就是关闭状态。一个灯被按的次数就是这个灯编号的因数的个数,要求有多少个灯亮着就是有多少个灯编号的因数个数是奇数。一个数的因数有奇数个,即这个数的因数是左右对称,同时中间有一个,即X×Y=n,当X=Y时,有一个值。也就是一个完全平方数。
推导得到:求n个数中完全平方数的个数。
代码
C语言程序实现int getPerfectSquare(int n){ int sum = 0; // 完全平方数的个数 int i; for(i=1; i<=n; i++){ if(i*i>n){ break; } // 打印得到的完全平方数 printf("%d * %d = %d\n", i,i,i*i); ++sum; } return sum; }
扩展:
完全平方数问题相关文章推荐
- 学生拉开关控制电灯明暗,求最后点亮的电灯个数
- 1997盏亮着的电灯,3的倍数的灯的拉一下;再将5的倍数的灯拉一下,最后有多少亮的灯
- 揭秘各国死囚的最后一餐
- jquery实现div内图片水平左右滚动,滚动到最后一张停止、可根据需求调整图片数量及大小
- 队内训练规矩【2011.9.16晚最后改动】
- Linux中显示一个文件最后几行的命令是什么?
- delphi 中本年,本月,本周第一天和最后一天
- C# RichTextBox 滚动条 滚动到最后一行
- 纽约时报:乔布斯最后的日子
- PHP 以POST方式提交XML、获取XML,最后解析XML
- 2012年Google校园招聘笔试最后一题
- 配置本地php环境,80端口被system占用怎么办?百度大部分都不行,最后才解决。。
- 【转帖】圆圈中最后剩下的数字
- 系统会随机给你一个日期(yyyy-MM-dd)字符串,你需要计算这个时间上一个月的最后一天的具体日期,最后以yyyy年MM月dd日的字符形式返回
- 获取本月最后一天
- java获取当前月第一天和最后一天,上个月第一天和最后一天
- 线程最后退出的时候抛出异常
- 考后总结——2016的最后一波自学考试(c++、数据结构)
- awk之取每天的第一条记录和最后一条记录
- PHP获取上个月最后一天的一个容易忽略的问题