0
0

More than 3 years have passed since last update.

プログラマ脳を鍛える数学パズル Q.02「数列の四則演算」

Last updated at Posted at 2020-11-24

基礎アルゴリズム力upのためPHPで解いてみた。
下記の考えのもと組んだ。

  • 1.for文で1000~9999を回す。
  • 2.正規表現指定(0を全て除外)
  • 3.数字を各位(千、百、十、一)に分け、それぞれの間に四則演算を入れたfor文。
  • 4.文字列式を作成。
  • 5.結合文字列をevalで計算 +6.対象数字と反転した結合結果の数字が一致するなら出力
<?php
$four_calc = array('+', '-', '*', '/','');
$count = count($four_calc);
for ($num = 1000; $num < 10000; $num++) {
  if (preg_match("/[0]+/", $num)) {
    continue;
  }
  $arrNum = str_split($num);
  for ($i = 0; $i < $count; $i++) {
        for ($j = 0; $j < $count; $j++) {
            for ($k = 0; $k < $count; $k++) {
        $cal_form = $arrNum[0].$four_calc[$i].
                    $arrNum[1].$four_calc[$j].
                    $arrNum[2].$four_calc[$k].
                    $arrNum[3]; // 文字列式を作成
        if (mb_strlen($cal_form) >= 5) {
          if (eval("return {$cal_form};") == strrev($num)) {
            print $cal_form . "=" . $num . "\n";
          }
        }
      }
    }
  }
}
?>

答えは、5*9*31=5931

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0