Einige häufig gestellte Fragen im Vorstellungsgespräch zum PHP-Algorithmus

王林
Freigeben: 2023-04-09 19:16:02
nach vorne
3484 Leute haben es durchsucht

Einige häufig gestellte Fragen im Vorstellungsgespräch zum PHP-Algorithmus

下面是整理好的几道php算法面试题,在近几年中这些题目频繁出现在面试题中,现在分享给大家,希望能对大家有所帮助。

题目一:

一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。

function king($m, $n) {
	if (1 >= $n) {
		return $n;
	}
	$monkeys = range(1, $n);
	$count = $n;
	while ($count > 1) {
		$remainder = $m % $count;
		unset($monkeys[$remainder - 1]);
		$monkeys = array_values($monkeys);
		$count--;
	}
	return array_shift($monkeys);
}
Nach dem Login kopieren

题目二:

有一母牛,到4岁可生育,每年一头,所生均是一样的母牛,到15岁绝育,不再能生,20岁死亡,问n年后有多少头牛。

function cows ($n) {
	$cows = [1];
	for ($i = 1; $i <= $n; $i++) {
		// 新出生的牛
		$new_number = 0;
		foreach ($cows as $age => $num) {
			// 4岁到14岁的牛生育新的母牛
			if ($age >= 3 &
			&
			$age <
			= 13) {
				$new_number += $num;
			}
		}
		// 将新出生的牛加到数组开头
		array_unshift($cows, $new_number);
		// 取出数组的前20个单元
		$cows = array_slice($cows, 0, 20);
	}
	return array_sum($cows);
}
Nach dem Login kopieren

题目三:

冒泡排序

function bubble_sort ($array) {
	$array = array_values($array);
	for ($i = 0; $i < count($array); $i++) {
		for ($j = 0;$j < count($array) - $i - 1; $j++) {
			if ($array[$j] > $array[$j + 1]) {
				$temp = $array[$j + 1];
				$array[$j + 1] = $array[$j];
				$array[$j] = $temp;
			}
		}
	}
	return $array;
}
Nach dem Login kopieren

题目四:

快速排序

function quick_sort ($array) {
	if (count($array) <
	= 1) {
		return $array;
	}
	$left_array = [];
	$right_array = [];
	$key = array_shift($array);
	foreach ($array as $value) {
		if ($key > $value) {
			$left_array[] = $value;
		} else {
			$right_array[] = $value;
		}
	}
	return array_merge(quick_sort($left_array), [$key], quick_sort($right_array));
}
Nach dem Login kopieren

(学习视频分享:php视频教程

题目五:

选择排序

function select_sort ($array) {
	$sort_array = [];
	while (count($array)) {
		$min = null;
		$min_key = null;
		foreach ($array as $key => $value) {
			if (is_null($min)) {
				$min = $value;
				$min_key = $key;
			} elseif ($min > $value) {
				$min = $value;
				$min_key = $key;
			}
		}
		$sort_array[] = $min;
		unset($array[$min_key]);
	}
	return $sort_array;
}
Nach dem Login kopieren

题目六:

字符集合:输入一个字符串,求出该字符串包含的字符集合,并按顺序排序

function unique_char ($str) {
	$arr = array_unique(str_split($str));
	sort($arr);
	return implode('', $arr);
}
Nach dem Login kopieren

题目七:

遍历一个文件下的所有文件和子文件夹下的文件

function all_file ($dir) {
	if (is_dir($dir)) {
		$resource = opendir($dir);
		while ($file = readdir($resource)) {
			if (in_array($file, ['.', '..'])) {
				continue;
			} elseif (is_dir($dir . '/' . $file)) {
				all_file($dir . '/' . $file);
			} else {
				echo $dir . '/' . $file, "\n";
			}
		}
	} else {
		echo $dir, "\n";
	}
}
Nach dem Login kopieren

题目八:

有个人想上一个n级的台阶,每次只能迈1级或者迈2级台阶,问:这个人有多少种方法可以把台阶走完?例如:总共3级台阶,可以先迈1级再迈2级,或者先迈2级再迈1级,或者迈3次1级总共3中方式.(实际上是斐波那契数列)

function ladder($steps) {
	return $steps <
	2 ? 1 : ladder($steps - 1) + ladder($steps - 2);
}
Nach dem Login kopieren

题目九:

遍历二叉树

class Node {
	public $value;
	public $left;
	public $right;
}
/**
 * 先序遍历 根节点 ---> 左子树 ---> 右子树
 *
 * @param $root
 */
function preorder ($root) {
	echo $root->value;
	if (!empty($root->left)) {
		preorder($root->left);
	}
	if (!empty($root->right)) {
		preorder($root->right);
	}
}
/**
 * 中序遍历,左子树---> 根节点 ---> 右子树
 *
 * @param $root
 */
function inorder ($root) {
	if (!empty($root->left)) {
		inorder($root->left);
	}
	echo $root->value;
	if (!empty($root->right)) {
		inorder($root->right);
	}
}
/**
 * 后序遍历,左子树 ---> 右子树 ---> 根节点
 *
 * @param $root
 */
function tailorder ($root) {
	if (!empty($root->left)) {
		tailorder($root->left);
	}
	if (!empty($root->right)) {
		tailorder($root->right);
	}
	echo $root->value;
}
$d = new Node;
$d->value = 'D';
$b = new Node;
$b->value = 'B';
$b->left = $d;
$e = new Node;
$e->value = 'E';
$f = new Node;
$f->value = 'F';
$c = new Node;
$c->value = 'C';
$c->left = $e;
$c->right = $f;
$a = new Node;
$a->value = 'A';
$a->left = $b;
$a->right = $c;
preorder($a);
echo "\n";
inorder($a);
echo "\n";
tailorder($a);
echo "\n";
Nach dem Login kopieren

学习视频分享:php视频教程

原文链接:https://www.woozee.com.cn/article/35.html

Das obige ist der detaillierte Inhalt vonEinige häufig gestellte Fragen im Vorstellungsgespräch zum PHP-Algorithmus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:吴宇博客
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!