欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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

程序员文章站 2022-04-30 15:11:13
...
噢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}
"; }
噢三个数字之间纠缠不清的故事.

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

相关文章

相关视频