Home  >  Article  >  Backend Development  >  噢三个数字之间纠缠不清的故事.

噢三个数字之间纠缠不清的故事.

WBOY
WBOYOriginal
2016-06-13 10:35:031482browse

噢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)<br><font color="#e78608">------解决方案--------------------</font><br>一般的,对于 $n, $n∈{123 321 456 654 465 ..}<br>可以有:<br>$t = str_split($n);<br>if( array_sum($t) == (reset($t)+end($t))*count($t)/2 ) echo 'ok';<br><br>但是对于认定 901、109 为连续,就超出一般的认知了<br><font color="#e78608">------解决方案--------------------</font><br>不能判断能够相加被3除就行,比如 258..<br><font color="#e78608">------解决方案--------------------</font><br>
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}<br>";}<div class="clear">
                 
              
              
        
            </div>
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn