算法_php猴子選大王_約瑟夫問題

題目:php

  n個猴子圍坐一圈,從第一個猴子開始數,到第m個出列,求最後一個猴子的編號.c++

分析:算法

  首先想到循環,而後隊列,而後堆,因此用數組模擬一個循環的列表,下標爲[0-(n-1)],下標+1整除m幹掉元素,不然加入隊尾,幹掉原來的元素,數據庫

實現:數組

 1 <?php
 2     echo getLastOne(6,2);
 3     
 4     function getLastOne($n,$m){
 5         $arr=range(1,$n);         
 6         $i= 0;
 7         while(count($arr)!=1){
 8             
 9             if(($i+1)%$m==0){
10                 unset($arr[$i]);
11             }else{ 
12                 $arr[]=$arr[$i];  //array_push()也是調用這個
13                 unset($arr[$i]);
14             }
15             $i++;
16         } 
17         return $arr[$i];
18     }

引伸:php7

  (-)指定從第x個開始數.優化

1 $arr1 = array_slice($arr,0,$x);
2 $arr2 = array_slice($arr,$x);
3 foreach($arr1 as $k){
4          $arr2[] = $k;    
5     }
6 
7 $arr=$arr2;

  (=)遞推優化spa

1 $i=0;
2 for($i=2;$i<=$m;$i++){
3      $res=0;
4      $res=($i+$m)%$n;
5 }
6 return $res+1;
//反向遞推

 這玩意裝b有用,主要是掌握這種計算和優化的思想.大量的算法主要是c和c++的底層實現,相對於php扁平化的敏捷開發,數據庫纔是瓶頸.(php7以後yaf要大興)code

相關文章
相關標籤/搜索