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),这意味着“接受$i,将其转换为字符串,然后将其反转。然后将其转换回int.

如果计算结果为真,则包含一个数组$i并将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 回答
0
//This is my little effort towards programming check if it satisfy your requirements 

$n = 1089;
$temp = $n;
$sum =0;
//reversing given number
while($n>1){
  $rem = $n%10;
  $sum = $sum*10 + $rem;
  $n = $n/10;
}
//checking for digit that satisfy criteria
for($i=0; $i<=9; $i++){
  if($i*$temp == $sum){
    echo "$temp * $i = $sum";
  }
}
于 2019-08-05T18:51:39.450 回答