Почему если убрать эти строки кода (помечены цифрами 1,2,3), то ответ будет 99, а если оставить то 9009? answ всегда же равно 0

function Check (x)

local check_x = x
local revers_x = 0

while (check_x > 0) do

  revers_x = revers_x * 10
  revers_x = revers_x + math.fmod(check_x, 10)
  check_x = check_x // 10

 end

 return revers_x == x

 end

 local x = 0
 local answ = 0

for i = 99, 1, -1 do

  for j = 99, 1, -1 do

    x = i * j
  if (answ > x) then   <--1
    break              <--2
  end                  <--3
   if (Check(x) == true) then
      answ = x
      break
    end
   end
  end
  print(answ)

Ответы (1 шт):

Автор решения: Faraday

Я в lua не понимаю ни грамма, но это вопрос больше о понимании концепции программирования. Сначала вы определяете revers_x = 0. Далее у вас идёт цикл while с условием check_x > 0, которое не выполняется (Думаю, объяснять "почему?" не стоит).

Вот это, на сколько я понимаю, обратные циклы, которые будут идти от 99 до 1 с шагом -1. За каждую итерацию у вас x присваивается значение i * j, т.е., уже на первой итерации x = i * j = 99 * 99 = 9801

Далее идёт проверка, если ваш answ, который в этот момент равен 0, больше произведения i на j, т.е. 9801, что, конечно же, не так. После этого идёт вызов функции Check, которая делает проверку, является ли число палиндромом. Если да, значит результат присваивается в переменную answ.

Самый первый палиндром при таких начальных значениях (99 для i, и 99 для j) является 9009, т.е. когда i = 99, j = 91.

После этого, во всех следующих итерациях будет выполняться проверка if (answ > x), т.е., больше ли уже записанный палиндром произведения при следующих итерациях (Что, конечно же не так, поскольку все следующие палиндромы будут меньше). Если да, значит действие цикла прекращается, и управление кодом не доходит до строчки if (Check(x) == true).

Если эту проверку просто убрать, значит вы будете каждый раз опять проверять, является ли число палиндромом, и если это так, вы будете обновлять переменную answ до того момента, пока она не станет равная 1

→ Ссылка