您的位置:首页 > 其它

最后亮的电灯数

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;
}


扩展:

完全平方数问题
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: