0

私はプログラミングが上手になるように独学しようとしています。これの一部として、私は新聞や雑誌で見つけたパズルを取り、プログラミングの解決策を見つけようとしています。

今日、2 から 9 までの数を掛けると反転する数に関するパズルを見ました。与えられた例は 1089 * 9 = 9801 でした。

これが適用される数字を見つけて配列に追加するために、phpでプログラムを書き始めました。

最初に、可能な数字を循環するループを作成しました。次に、それぞれの数字を逆にして、数字と逆の数字を比較する関数を作成しました。次に、関数は基準を満たす数値を返し、それらを配列に追加します。

これは私がこれまでに持っているものです...

<?php

        function mul(){ // multiply number from loop

            for($i=2;$i<=9;$i++){

                $new = $num * $i;

                    if($new == $re){
                    return $new;    
                    }
                    else{
                    return;
                    }
            }
        }

        $arr =  array();

        for ($num = 1000; $num <10000; $num++) { //loop through possible numbers

                      $re =  strrev($num); // get reverse of number
                      func($re,$num); //multiply number and return correct numbers
                      $arr.push($new); //add to array??
         }
 ?>

私はまだphpに非常に慣れていませんが、プログラミングを理解していることがわかりました。このパズルを行うより論理的な方法についての指針は大歓迎です。

4

3 に答える 3

3

これがネストされたループを使った私の解決策です。速くて汚い。

$result = array();
for ($i = 1000; $i < 5000; $i++) {
    for ($m = 2; $m < 10; $m++) {
        if ($i*$m == (int)strrev($i)) {
            $result[] = array($i, $m);
        }
    }
}
var_dump($result);

この行を拡張したいと思います:

if ($i*$m == (int) strrev($i)) {

片側は$i*$m、簡単に、乗算です。

一方、 「を取り、それを文字列にキャストし、それを逆にします。次に、それをにキャストバック(int)strrev($i)する」という意味のがあります。$iint

$iそれがtrueと評価された場合、とを含む配列が配列mに挿入され$resultます。

于 2012-11-07T19:18:11.107 に答える
0

また、面接の準備のために解決する論理的な質問を探していました。この質問を共有していただきありがとうございます。私はこの質問を解決しましたが、Javaを使用しています。非常に基本的な概念を使用しました。理解してphpに変換できることを願っています。

public static boolean processNumber(int number)
{
    for(int i=2;i<=9;i++)
    {
        int reverseNumber=number*i;
        boolean status=checkReverse(reverseNumber,number);
        if(status)
        {
            return true;
        }
    }

    return false;
}

public static boolean checkReverse(int reverseNumber,int numberOriginal)
{
    int number=reverseNumber;
    int reverse=0,digit;
    do
    {
        digit=number%10;
        number=number/10;
        reverse=reverse*10+digit;
    }while(number>0);

    if(reverse==numberOriginal)
    {
        return true;
    }
    else
    {
        return false;
    }
}
于 2012-11-10T11:42:46.857 に答える