·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> 网站建设开发 >> php网站开发 >> 面试题一

面试题一

作者:佚名      php网站开发编辑:admin      更新时间:2022-07-23

最近在网上看见一道面试题,随手做了一下,也作为我开始写博客的第一篇开始。

因为我最近在学习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 ?>

 

  有更好的方法,会后续更新。