题目:
有10张扑克牌,从上面开始抽,抽出一张放在桌子上,然后再抽出一张放在扑克牌的最下面,这样循环往复的操作,直到手中的牌都没有了
在看到这个时候,感觉特别简单,不过在实现的时候,逆序还原,有点没反应过来,实现的时间长了点。
以下是实现的具体实现代码:
/**
* 这时,桌子上牌的顺序正好是1 2 3 4 5 6 7 8 9 10。
* 要求写代码求出原来顺序
*/
/**
* 还原数组原来的顺序
* 逆序还原
*/
function asycArrSort($arr) {
$ori_arr = [];
$count = 0;
$num = count($arr);
for ($i = $num - 1; $i >= 0; $i--) {
$ori_count = count($ori_arr);
// 判断是否是最后一个
if($ori_count > 1) {
// 把数组最下面的值,取出
$ori_end = array_pop($ori_arr);
// 将取出的数据,放到数组的最前面
array_unshift($ori_arr, $ori_end);
}
// 将数组的最后一个数据,放到新的数组的最前面
array_unshift($ori_arr, array_pop($arr));
}
return $ori_arr;
}
/**
* 正序下发顺序
*/
function arrSort($ori_arr) {
$ori_num = count($ori_arr);
$new_arr = [];
for ($j = 0; $j < $ori_num; $j++) {
// 把每次循环的第一个元素放入新数组的最后,删除老数组的第一个元素
array_push($new_arr, array_shift($ori_arr));
if(count($ori_arr) > 0) {
// 获取当前老数组第一个元素【上面已经去掉一个元素了】,放到数组的最后
$ori_start = array_shift($ori_arr);
array_push($ori_arr, $ori_start);
}
}
return $new_arr;
}
$arr = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
$ori_arr = asycArrSort($arr);
print_r($ori_arr);
$new_arr = arrSort($ori_arr);
print_r($new_arr);
原来的数组顺序:
Array
(
[0] => 1
[1] => 6
[2] => 2
[3] => 10
[4] => 3
[5] => 7
[6] => 4
[7] => 9
[8] => 5
[9] => 8
)
放在桌子上的顺序:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
[6] => 7
[7] => 8
[8] => 9
[9] => 10
)