Почему если убрать эти строки кода (помечены цифрами 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 шт):
Я в 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