Почему эти вложенные циклы while не работают?

Я пытался и пытался, и пытался заставить этот код работать, и продолжал придумывать пшик. Поэтому я решил попробовать вместо этого использовать «циклы for», и это сработало с первой попытки. Может ли кто-нибудь сказать мне, почему этот код не годится?

<?php
$x = $y = 10;

while ($x < 100) {
    while ($y < 100) {
        $num = $x * $y;
        $numstr = strval($num);
        if ($numstr == strrev($numstr)) {
            $pals[] = $numstr;
        }
        $y++;
    }
    $x++;   
}
?>

person aliov    schedule 06.06.2010    source источник


Ответы (3)


вы должны сбросить y = 10 в первое время.

$x = 10;

while ($x < 100) {
    $y = 10;
    while ($y < 100) {
        $num = $x * $y;
        $numstr = strval($num);
        if ($numstr == strrev($numstr)) {
            $pals[] = $numstr;
        }
        $y++;
    }
    $x++;   
}
person Marco Mariani    schedule 06.06.2010
comment
Это так просто? Я установил переменную y не в том месте? - person aliov; 06.06.2010
comment
ну, вы устанавливаете его только один раз.. в любом случае, если вы ищете палиндромы xy, вы можете не проверять _both_ xy и y*x, поэтому я бы установил $y=$ х вместо $y=10. - person Marco Mariani; 06.06.2010

Вам нужно сбросить y до начала цикла y.

While($x < 100){
 $y=10; //... rest of code
person Mike Sherov    schedule 06.06.2010

Для циклов, которые перебирают целое число, которое увеличивается, я бы предпочел цикл for:

for ($x=0; $x < 100; $x++) {
  for ($y=10; $y<100; $y++) {
    $num = $x * $y;
    $numstr = strval($num);
    if ($numstr == strrev($numstr)) {
      $pals[] = $numstr;
    }
  }  
}

ИМХО, это намного читабельнее и короче.

person jigfox    schedule 14.06.2010