噢3個數字之間糾纏不清的故事...
嘿嘿,標題黨又來了。話說朋友問我個問題,如何判斷3個數字是順的?比如 123 321 456 654 465 ...901 901 019
也就是根據數值判斷是3個數字是否是相連內的成員
我的想法是 先分割,取得3個數裡最小的,然後判斷剩下的兩個是否都在裡面
比如 321 取得1 然後判斷 23 是否存在,如果存在就能確定.
特殊的901 直接定義一個數組進行判斷,判斷是否包含0 如果是 判斷是否包含9和1 ...(這裡可能需要排除012)
不知道各位有沒有其他更簡便的方式?
------解決方案--------------------
可以挨著判斷,比如一個為234,取出2,那麼第二位就是3或者1,記錄下是增還是減,然後就可以遞迴判斷後面的n位,這樣可以適合多個數位判斷
------解決方案--------------------
我的想法是:只真對數子哈:
直接將之截取放入數組中!然後數組安小-》大排個序,在取中間數去和兩邊的數比較判斷;
------解決方案--------------------
想到一個,019 特殊情況 之和為10 ,其他情況之和為中間數*3 . 代碼如下:
PHP code
function foo($s){ $arr=str_split($s); if(in_array('9',$arr)) return (array_sum($arr)==10) ; sort($arr,SORT_NUMERIC); return array_sum($arr)==$arr[1]*3 ;}var_dump(foo('019')); //bool(true)var_dump(foo('243')); //bool(true)
------解決方案--------------------
一般的,對於 $n, $n∈{123 321 456 654 465 ..}
可以有:
$t = str_split($n);
if( array_sum($t) == (reset($t)+end($t))*count($t)/2 ) echo 'ok';
但是對於認定 901、109 為連續,就超出一般的認知了
------解決方案--------------------
不能判斷能夠相加被3除就行,比如 258..
------解決方案--------------------
PHP code
$temp = '0123456789 089 019';$samples = array(123, 321, 456, 654, 465, 901, 109, '019', 890, 908, 135, 250);foreach ( $samples as $value ) { $ds = str_split( $value ); sort( $ds ); $ds = implode( '', $ds ); $result = ( strstr( $temp, $ds ) !== false ) ? 'yes' : 'no'; echo "{$value} - {$ds} : {$result}
";}