今天看到一道面试题,思考了集中解决办法,留下纪念
大厅里有100盏灯,每盏灯都编了号码,分别为1-100。每盏灯由一个开关来控制。(开关按一下,灯亮,再按一下灯灭。开关的编号与被控制的灯相同。)开始时,灯是全灭的。现在按照以下规则按动开关。
第一次,将所有的灯点亮。
第二次,将所有2的倍数的开关按一下。
第三次,将所有3的倍数的开关按一下。
以此类推。第N次,将所有N的倍数的开关按一下。
问第100次按完以后,大厅里还有几盏灯是亮的。
方法一:
$n = 100;
$a = array();
for ($i=1;$i<$n+1;$i++){
$a[$i] = 1;
}
for ($i=2;$i<$n+1;$i++){
for ($j=2;$j<$n+1;$j++){
if ($j%$i==0) {
$a[$j] ^= 1;
}
}
}
$num = 0;
foreach ($a as $b){
if ($b==1) {
$num++;
}
}
echo $num;
方法二:
$n=0;
for ($i=1;$i<101;$i++){
$j=$i*$i;
if ($j>100){
break;
}
if ($j%1==0) {
$n++;
}
}
echo $n;
方法三:
$n=100;
echo floor(sqrt($n));