Advertisement

面试题 100盏灯问题

阅读量:

问题描述:共有100盏灯,编号依次为1至100,初始状态均为关闭。此时有100人依次经过,第一个人将所有灯的开关按下;第二个人则每隔一盏灯按下(如2、4、6等);第三个人每隔两盏灯按下(如3、6、9等);依此类推,第100个人仅按下编号为100的灯。最终会有多少盏灯保持开启状态?
问题分析:由于所有灯初始均为关闭状态,因此只有当某盏灯被按下的次数为奇数时才会处于开启状态,若为偶数则保持关闭。每盏灯被按下的次数与其编号的正约数个数密切相关。
例如:编号为1的灯被按下1次;
编号为2的灯被按下2次;
编号为3的灯被按下2次;
编号为4的灯被按下3次;
……
由此可知,非平方数的正约数个数一定是偶数,而平方数的正约数个数则必定是奇数。因为只有当开关被按下的次数为奇数时灯光才会亮起,因此在编号从1到100中,平方数包括了如下数值:1(即1²)、4(即2²)、9(即3²)、16(即4²)、25(即5²)、36(即6²)、49(即7²)、64(即8²)、81(即9²)以及100(即10²),共计有10个数字。因此最终保持开启状态的灯光共有10盏。
这些保持开启状态的灯光对应的编号分别为从1到10各数字的平方。(也就是说需要找出从1到100之间的所有完全平方数值)
代码实现如下

复制代码
    #include<stdio.h>
    #include<i

全部评论 (0)

还没有任何评论哟~