ホームページ >バックエンド開発 >PHPチュートリアル >ああ、絡み合った 3 つの数字の物語。
ああ、3 つの数字の絡みの話…
ふふ、またクリックベイトが来ましたね。ところで、友人から「3つの数字が順番に並んでいるかどうかをどうやって判断するのですか?」という質問がありました。例えば、123 321 456 654 465...901 901 019
つまり、数値に基づいて、3つの数字がつながっているメンバーであるかどうかを判断します
私の考えは、それを分割することですまず一番小さい数字を3つ取得し、残りの2つが入っているかどうかを判定します
例えば、321は1を取得し、23が存在するかどうかを判定します。
特殊な901は、判定用の配列を直接定義して、0が入っているかどうかを判定するのですが、9と1が入っているかどうかを判定するのであれば…(012はここで除外する必要があるかもしれません)
って感じでしょうか。他に簡単な方法はありますか?
-----解決策---------------------------- ----
はい 1つずつ判断して、例えば1つが234なら2を取り出し、2桁目が3か1で増えているのか減っているのかを記録すれば再帰的にできます。次の n 桁を判断します。複数の数字を判断するのに適しています。
------解決策------------------
私のアイデアは次のとおりです: 真の対数だけです (笑) :
それを直接インターセプトして配列に入れます。次に、配列を小さい順と大きい順に並べ替えて、中央の数値を取得し、両側の数値と比較します。
------解決策------------------
1 つ考えてみましょう。019 の特殊なケースの合計は 10、その他のケースの合計は中央の数字 * 3 です。コードは次のとおりです:
PHP コード
関数 foo($s){
$arr=str_split($s);
if(in_array('9',$arr))
return (array_sum($arr)==10) ;
ソート($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"> 一般に、$n の場合、$n∈{123 321 456 654 465 ..}</font> は次のようにすることができます: <br>$t = str_split($n);<br>if( array_sum($t) == (リセット($t)+end($t))*count($t)/2 ) echo 'ok';<br><br>しかし、901 と 109 を連続したものとして識別するのは一般的な理解を超えています <br><br>-----解決策---------<br><font color="#e78608">加算・分割できるとは判断できないby 3. たとえば、258.. </font><br>------解決策------------------<br><font color="#e78608"> </font>PHP コード<br> $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 ); ソート( $ds ); $ds = implode( '', $ds ); $result = ( strstr( $temp, $ds ) !== false ) ? echo "{$value} - {$ds} : {$result}<br>";