最近在網上看見一道面試題,隨手做了一下,也作為我開始寫博客的第一篇開始。
因為我最近在學習PHP,所以我就用PHP來解決它,不過天下語言是一家,其他的語言也可參照思想。題目比較簡單,如下:
大廳裡有100盞燈,每盞燈都編了號碼,分別為1-100。每盞燈由一個開關來控制。(開關按一下,燈亮,再按一下燈滅。開關的編號與被控制的燈相同。)開始時,燈是全滅的。現在按照以下規則按動開關。
第一次,將所有的燈點亮。
第二次,將所有2的倍數的開關按一下。
第三次,將所有3的倍數的開關按一下。
以此類推。第N次,將所有N的倍數的開關按一下。
問第100次按完以後,大廳裡還有幾盞燈是亮的。
方法如 下:
1 <?php 2 3 //totle:總共的燈盞數,times:按動開關的次數 4 function switchLight($totle,$times){ 5 //定義開關打開和關閉的狀態屬性 6 $on=1; 7 $off=-1; 8 //定義一個按動開關的動作 9 $oc=-1; 10 //建立一個數組,動態存儲燈盞數目,並初始化狀態 11 $lights=array(); 12 for($i=1;$i<=$totle;$i++){ 13 $lights[$i]=$off; 14 } 15 //判斷沒有按動開關的情況 16 if($times==0){ 17 return 0; 18 } 19 //循環判斷,並按動開關 20 for($j=1;$j<=$times;$j++){ 21 for($k=1;$k<=$totle;$k++){ 22 if(!($k%$j)) 23 $lights[$k]*=$oc; 24 } 25 } 26 //遍歷出所有為on的燈,並存入新數組 27 $newLights=array(); 28 for($r=1;$r<=$totle;$r++){ 29 if($lights[$r]==$on){ 30 $newLights[]=$r; 31 } 32 } 33 return $newLights; 34 35 } 36 37 $newLights=switchLight(100,100); 38 echo "結果有".count($newLights)."盞燈亮,具體如下:"; 39 foreach($newLights as $light){ 40 echo $light; 41 echo "\n"; 42 } 43 ?>
有更好的方法,會後續更新。