继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

PHP常见几道算法题目解析

weiyihigh
关注TA
已关注
手记 51
粉丝 104
获赞 364

图片描述

第一题:

$a = '&&29&&&&&yy3&&';
$s = '&&';
function strToArr($a,$s){
	$n = strlen($s);
	$j = 0;
	$data = array();
	for($i=0;$i<strlen($a);$i++){
		if(substr($a,$i,$n)==$s){
			if($i==0){
				$data[$j] = '';
				$j++;
				$i += $n-1;
				continue;
			}else if($i==(strlen($a)-$n)){
				$j++;
				$data[$j] = '';
				$i += $n-1;
				continue;
			}else if(substr($a,$i+$n,$n)==$s){
				$j++;
				$data[$j] = '';
				$i += $n-1;
				continue;
			}else{
				$j++;
				$i += $n-1;
				continue;
			}
		}else{
			if(!isset($data[$j]))
			$data[$j] = '';
			$data[$j] .= $a[$i];
		}
	}
	return $data;
}
echo '<pre>';
echo '字符串1:'.$a;
echo '分割符:'.$s;
var_dump(strToArr($a,$s));
echo '</pre>';
echo '<pre>';
$a = 'yyy29yyy&&yyy3&&';
$s = 'yyy';
echo '字符串2:'.$a;
echo '分割符:'.$s;
var_dump(strToArr($a,$s));
echo '</pre>';

得到结果:

字符串1:&&29&&&&&yy3&&分割符:&&
array(5) {
[0]=>
string(0) ""
1=>
string(2) “29”
[2]=>
string(0) “”
[3]=>
string(4) “&yy3”
[4]=>
string(0) “”
}
字符串2:yyy29yyy&&yyy3&&分割符:yyy
array(4) {
[0]=>
string(0) ""
1=>
string(2) “29”
[2]=>
string(2) “&&”
[3]=>
string(3) “3&&”
}

### 第一题(2)
$a = array('11','55','&&','ee');
$s = '&&';
function arrToStr($a,$s){
	$str = '';
	foreach($a as $k=>$v){
		$str .= $v.$s;
	}
	$str = substr($str,0,-2);
	return $str;
}
$str = arrToStr($a,$s);
echo '<pre>';
echo '数组:';
var_dump($a);
echo '拼接符:'.$s;
var_dump($str);

输出结果

数组:array(4) {
[0]=>
string(2) "11"
1=>
string(2) “55”
[2]=>
string(2) “&&”
[3]=>
string(2) “ee”
}
拼接符:&&
string(14) “11&&55&&&&&&ee”

第二题:

$n = 100;
function getMaxNum($n){
	//去除偶数
	if($n%2==0)
		$n = $n-1;
	//遍历奇数 被除数为奇数
	for($n;$n>=2;$n -=2){
		$flag = '';	
		for($i=sqrt($n);$i>2;$i-= 2){
			echo 1;
			//能被整除 非质数 结束循环
			if(($n%$i==0)){
				$flag = 1;
				break;
			}
		}
		if(!$flag){
			return $n;
		}
	}
	return false;
}
$num = getMaxNum($n);
var_dump($num);

输出结果

11111int(97)

第三题

$a = [0,1,2,3,4,5,6,7,8,9,6];
function getRepeat($a){
	$data = [];
	foreach($a as $k=>$v){
		if(isset($data[$v]) && $data[$v]==$v){
			return $v;
		}
		$data[$v] = $v;
	}
	return false;
}
$num = getRepeat($a);
var_dump($num);

输出结果:

int(6)

第四题:

function king($n,$m) {
	$people = range(1,$n);
	$i = 0;
	while(count($people) > 1) {
		if(($i+1)%$m == 0) {
			unset($people[$i]);
		} else {
			//如果不是制定的数字直接往后面追加 这样可以一直进行下去
			array_push($people,$people[$i]);
			unset($people[$i]);
		}
		$i++;
	}
	return current($people);
}
$n = 8;$m = 4;
$king = king($n,$m);
print_r($king);

输出结果

6

打开App,阅读手记
2人推荐
发表评论
随时随地看视频慕课网APP