php面试题一

2019-03-05 23:08|来源: 网路

1、有一个word.txt文件,里边存的是类似于单词库(英语),一个单词独占一行。然后让你写一个长须实现:当用户输入一句话时(英语),自动进行识别,如果单词真确不提示,如果单词不正确,给用户推荐一个(有且只有一个)单词。{类似于以前在word中写单词,如果写错了,它会给你提示一个下划线,右击会出现一个推荐的单词}


PHP部分 第一 fopen(文件名,'r'),第二while(!feof){array[]=fgets()} array_flip (array) 键值交换  然后按照键名排序ksort  正向排序。取所有键值array_keys
接受用户当前输入的信息$x。如果$X在数组中(in_array)在则返回空,不在则范围$X相邻数据(先判断首字母或者逐个对比)。
html部分
js获取信息 ajax发送请求。


连续输入一句英文  how are you  按照一定的分隔符分开 存在数组中 总是去最后一个


2、如何定义一个常量,判断常量是否存在用什么函数?

考点分析:

   常量和变量的区别

参考答案:

定义常量:define("TEST",'hello')

判断常量是否存在:defined("TEXT")

if(defined("TEXT")){

   echo TEST;

}


<?php
//定义常量
define('NAME','向游');
//判断常量是否存在
$defined = defined('NAME')?'存在':'不存在';
?>


3、把下面数组排序,不能用系统函数(如:sort),相同值的按键排序

$arr = array('a'=>'ab','ab'=>'ac',abc=>'ab');


array(

1=>array('tid'=>1,'title'=>'aaa','content'=>'sadaf');

2=>array('tid'=>2,'title'=>'bbb','content'=>'asdgxc');

3=>array('tid'=>3,'title'=>'ccc','content'=>'zxcbc');

4=>array('tid'=>4,'title'=>'ddd','content'=>'rwer');

5=>array('tid'=>5,'title'=>'eee','content'=>'hjkhj');

);

变成

array(

       1=>array(

               1=>array('title'=>'aaa','content'=>'sadaf');

               2=>array('title'=>'bbb','content'=>'asdgxc');

               3=>array('title'=>'ccc','content'=>'zxcbc');

               4=>array('title'=>'ddd','content'=>'rwer');

       );

       2=>array(

               1=>array('title'=>'eee','content'=>'hjkhj');

       );

);


4、定义一个字符变量的方法,要列出三种

题目内容:

定义一个变量的方法,要列出三种?

复制代码

考点分析:

   PHP的字符串有三种定义方式:单引号 、双引号 、定界符

参考答案:

$str = ‘aaa’;

$str = “aaa”;

$str= <<<test


5、大厅里有100盏灯,每盏灯都编了号码,分别为1-100。每盏灯由一个开关来控制。(开关按一下,灯亮,再按一下灯灭。开关的编号与被控制的灯相同。)开始时,灯是全灭的。现在按照以下规则按动开关。

第一次,将所有的灯点亮。

第二次,将所有2的倍数的开关按一下。

第三次,将所有3的倍数的开关按一下。

以此类推。第N次,将所有N的倍数的开关按一下。

问第100次按完以后,大厅里还有几盏灯是亮的。


$arr = array();


for($i=1;$i<=100;$i++){//构造数组  0:灯亮,1:灯灭

       $arr[$i] = 0;

}

//print_r($arr);

//echo '<hr />';

function liang($arr,$num){

       for($j=1;$j<=$num;$j++){//100次循环

               foreach($arr as $k=>$v){

                       if($k % $j == 0){

                               if($arr[$k] == 0){

                                       $arr[$k] = 1;

                               }else{

                                       $arr[$k] = 0;                                        

                               }

                       }else{

                               continue;

                       }

               }

       }

       //print_r($arr);

       

       $i = 0;

       $res = array();

       foreach($arr as $k => $v){

               if($v == 1){

                       $i+=1;

                       $res[$k] = $i;//$k表示第几盏灯亮,$i表示共几盏亮

               }else{

                       continue;

               }

       }

       return $res;

}

print_r(liang($arr,100));


<?php


$on = 1;

$off = 0;

$arr = array();


for($i = 1;$i <= 100;$i++) {

   $arr[$i] = $off;

}



function test($arr,$m) {

   global $on,$off;

   $len = count($arr);

   $list = array();

   for($j = 1;$j <= $m;$j++) {

       if($j == 1) {

           for($w = 1;$w <= $len;$w++) {

               $arr[$w] = $on;

           }

       } else {

           for($n = 1;$n <= $len;$n++) {

               if($n%$j == 0) {

                   if($arr[$n] == $on) {

                       $arr[$n] = $off;

                   } else if($arr[$n] == $off) {

                       $arr[$n] = $on;

                   }

               }

           }

       }

   }


   for($q = 1;$q <= $len;$q++) {

       if($arr[$q] == $on) {

           $list[$q] = $on;

       }

   }

 

   return $list;

   

}


$m = 100;

$arr = test($arr,$m);


echo '<pre>';

echo count($arr),'<br />';

print_r($arr);


?>



/*

1 1

2 1,2

3 1,3

4 1,2,4

5 1,5

6 1,2,3,6

7 1,7

8 1,2,4,8*/

$arr = array();

for($i=1;$i<=100;$i++){

    //构造数组  1:灯亮,0:灯灭

    $arr[$i] = 1;

}

function liang1($arr,$num){

  $result=$res=array();

  for($i=1;$i<=$num;$i++){

            $temp=array();

     for($j=1;$j<=$i;$j++){

              if($i % $j==0){

           $temp[]=$j;

              }

     }

     $count=count($temp);

     if($count % 2 ==1){

        $res[]=$i;

     }

  }

  foreach($res as $v){

     if(array_key_exists($v,$arr)){

        $result[]=$v;

     }

  }

  return $result;

}

print_r(liang1($arr,100));

我的思路是将这个灯亮灯灭问题转换成求一个数字的所有公因子问题,然后统计这个数字公因子的个数,灯只有两种状态,第一次已经全部亮了,那就让公因子个数对2求余,如果求余得到的结果是1,那就是最后灯还亮着,这样得到结果的


for($i=1;$i<=100;$i++){

       $arr[$i] =0;

}


//print_r($arr);   //形成100盏灯,初始全灭


$n = count($arr);


for($i=1;$i<=$n;$i++){

       foreach($arr as $k=>$v){

               if($k%$i == 0){

                       $arr[$k] = $v==0? 1 :0;   //开关100次

               }

       }

}


$kai = array();

foreach($arr as $k=>$v){

       if($v ==1){

               array_push($kai,$k);  //找出所有开着的灯

       }

}


print_r($kai);

?>


<?php

header("Content-type:text/html;charset=utf-8");

/*1:大厅里有100盏灯,每盏灯都编了号码,分别为1-100。每盏灯由一个开关来控制。

(开关按一下,灯亮,再按一下灯灭。开关的编号与被控制的灯相同。)

开始时,灯是全灭的。现在按照以下规则按动开关。

第一次,将所有的灯点亮。

第二次,将所有2的倍数的开关按一下。

第三次,将所有3的倍数的开关按一下。

以此类推。第N次,将所有N的倍数的开关按一下。

问第100次按完以后,大厅里还有几盏灯是亮的。*/



for ($i=1; $i <= 100; $i++) {

       $arr[$i]= 0;

}


/*print_r($arr);

exit();*/

/*开关函数*/


function changeT($v){

       if ($v) {

               $v = 0;

       }else{

               $v = 1;

       }

       return $v;

}


function get($arr,$changeT){


       for ($c=1; $c <= 100; $c++) {

               foreach ($arr as $k => $v) {

                       if ($k%$c==0) {

                               $arr[$k] = $changeT($v);

                       }else{


                       }

               }

       }

       return $arr;

}


echo array_sum(get($arr,'changeT'));

?>



2:有一根27厘米的细木杆,在第3厘米、7厘米、11厘米、17厘米、23厘米这五个位置上各有一只蚂蚁。木杆很细,不能同时通过一只蚂蚁。开始时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前走或调头,但不会后退。当任意两只蚂蚁碰头时,两只蚂蚁会同时调头朝反方向走。假设蚂蚁们每秒钟可以走一厘米的距离。编写程序,求所有蚂蚁都离开木杆的最小时间和最大时间。


//在算需要的最长时间前,先得考虑蚂蚁的走动的方向,怎么样走才需要更多的时间

//'+'代表蚂蚁当前应该往右走 '-'代表蚂蚁当前应该往左走   1______3_________7_________11___________17____________23____________27

//只要两只蚂蚁碰头了 则掉头往反方向走

$arr=array('a'=>array(3,'+'),'b'=>array(5,'+'),'c'=>array(11,'-'),'d'=>array(17,'-'),'e'=>array(23,'-'));

for($i=1;;$i++){

   foreach($arr as $key=>$val){

           if($arr[$key][1]=='+'){

               $arr[$key][0]=$arr[$key][0]+1;

           }else{

               $arr[$key][0]=$arr[$key][0]-1;

           }

   }

   //判定相邻的两只蚂蚁是否碰头,如果碰头就修改运算符

   bi($arr,'a','b');

   bi($arr,'b','c');

   bi($arr,'c','d');

   bi($arr,'d','e');  

   

   //如果b,c,d三种蚂蚁同时走出了木棍, 则停止循环

   if(($arr['c'][0]<=0 || $arr['c'][0]>=28) &&($arr['c'][0]<=0 || $arr['c'][0]>=28) && ($arr['d'][0]<=0 || $arr['d'][0]>=28)){

       echo $i;  //25

       break;

   }

}

//修改运算符函数

function bi(&$arr,$a,$b){

    if($arr[$a][0]==$arr[$b][0]){

       if($arr[$a][1]=='+'){

           $arr[$a][1]='-';

       }else{

           $arr[$a][1]='+';

       }


       if($arr[$b][1]=='+'){

           $arr[$b][1]='-';

       }else{

           $arr[$b][1]='+';

       }

   }

}



这个类似是

醉汉看守问题(The Drunk Jailer)


假设有N把锁,最初这N把锁都是锁住的。现在进行K轮操作,每轮对符合要求的锁切换锁的状态(如果是锁住状态就开锁,否则上锁)。第i轮只对编号为i的倍数的锁切换锁的状态(包括i在内),如第2轮对编号为2,4,6,…的锁切换锁的状态。请问k轮后,有多少锁是打开的?


解析:由题意可以分析,编号为M的锁只有在第i轮切换锁的状态(i是M的因数)。当M的因数个数为偶数时,M是被锁住的;当M的因数个数为奇数时,M是打开的。因此这个问题就被转换成了K以内有多少个因数个数为奇数的数。


——第一次转换


如果说M有因数i,那么必然存在另一个因数j,使得M=i*j。一般情况下i≠j,当M是完全平方数时才有i=j。这里我们不需要规定i和j必须是素数,因为当i和j是素数时,它仍然可以分解成1和M本身,不论怎么分解都会有成对的因数出现。所以只有当M是完全平方数时,其因数个数为奇数。因此这个问题就被转换成了K以内有多少个完全平方数。


——第二次转换。


假设K=99,那么K以内最大的完全平方数为81,则一共有 =9个完全平方数(分别为1,4,9,16,25,36,49,64,81),则一共有9把锁是处于打开的状态的。


K以内有完全平方数的个数可以用公式floor(sqrt(k))来计算。



书生整理

相关问答

更多
  • java基础面试题[2022-04-05]

      1.抽象:   抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。   2.继承:   继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继 承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变 ...
  • java基础面试题[2023-10-31]

    1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。 2.继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继 承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修 ...
  • 一、请填写BOOL , float, 指针变量 与“零值”比较的 if 语句。(10分) 提示:这里“零值”可以是0, 0.0 , FALSE或者“空指针”。例如 int 变量 n 与“零值”比较的 if 语句为: if ( n == 0 ) if ( n != 0 ) 以此类推。 请写出 BOOL flag 与“零值”比较的 if 语句: 请写出 float x 与“零值”比较的 if 语句: 请写出 char *p 与“零值”比较的 if 语句: 二、以下为Wi ...
  • 审计面试题[2022-07-29]

    这个问题太笼统; 1、你是一般审计人员面试题?审计主管面试题?高级审计总监面试题? 2、不同的企业对审计人员要去的侧重点不一样,所以面试的问题也不一样? 3、一般来说面试分为四大类: @专业面试; @职业道德面试; @综合能力面试; @原则果敢面试;
  • 审计面试题目[2022-03-11]

    1、自我介绍。 2、 常规问题 3、专业 审计面试具体问些什么,怎么问你去这里看吧www joboo6 com
  • 绩效专员面试题[2022-05-21]

    我去面试的时候问了我很多,我在“面试119”总结了面试的必考题,你自己去吧。百度一下“面试119”
  • 软件测试面试题[2022-04-20]

    第一题:我认为需要在测试前需要先写好测试计划,其中最重要的是本次测试使用的测试方法、使用的测试工具、测试环境。人员方面需要进行人员及进度的安排,每个测试阶段后的输出工件,还要有风险评估。在测试前将这些准备工作做到位,这样在测试的时候就会比较有条理。 第二题:控制测试质量,我认为最好是做好测试用例的设计,这样可以对测试的覆盖率进行控制。 补充:如果时间充裕的话可以在设计用例后对其进行评审,这样可以提高测试质量。不过这个在实际的工作当中一般实现不了。。。。 下面列出的是网上的一个软测笔试题,好多单位在笔试的时候 ...
  • 基于AXIS的web service: 1 比如要建一个Server.java类的web service public class Server { public String printInfo(String name){ return "Hello,"+name; } } 2 把Server.java改为Server.Jws放到 …\Tomcat 5.5\webapps\axis中,重启服务器 3 访问 4 在cmd中输入 cd D:\Program Files\Apache Software Foun ...
  • 我有一部分!
  • 面试都不会有固定试题,有朋友去面试过,听说震坤行的员工还是比较亲切的,常态发挥就可以了,不用太担心。