У этой задачи есть два решения — одно рассчитано на детей, второе — на взрослых суровых программистов. Какое сможете найти вы?
Сама задача выглядит так:
Надо найти, чему равны A и B.
Представим, что мы знаем только самое простое умножение, максимум — с двузначными числами. Начнём с самого первого действия умножения в столбик:
AB × A = 384
Так как AB — это A × 10 + B, то если разделить AB на 10, то получим число A,B. Получается, что A,B × A = 38,4 (потому что первую строку мы тоже делим на 10.
А теперь следите за логикой. Это число — 38,4 — близко к квадрату числа A (A × A), и погрешность вносит только дробная часть. Представим, что её нет и посмотрим, квадрат какого числа максимально близко к 38,4:
5 × 5 = 25 → нет, слишком мало
6 × 6 = 36 → похоже на правду
7 × 7 = 49 → не, уже перебор
Получается, что число A — это 6. Зная это, подставим пока ноль вместо числа B и посмотрим, что получится:
60 × 6 = 360
Но у нас на второй строке стоит 384. Это значит, что B × 6 = 384 − 360 = 24. Получается, что B = 4.
Проверяем: 64 × 46 = 2944. Всё сходится, а значит, мы решили всё правильно.
Если мы будем решать эту задачу как программисты, то сразу заметим число 256 и вспомним, что 256 = 2 в восьмой степени. Это значит, что все его множители будут кратны двойке:
128 × 2
64 × 4
32 × 8
16 × 16
Число 256 получилось из умножения AB × B, то есть двузначного числа на однозначное. Из всех наших пар 128 × 2 не подходит, потому что 128 — трёхзначное число. И 16 × 16 тоже не подходит, потому что в этом случае мы умножаем не на однозначное, а на двузначное число.
Остаются пары 64 × 4 и 32 × 8. Но шаблону AB × B соответствует только пара 64 × 4, а значит, A = 6, а B = 4.
Для нетерпеливых есть решение, которое можно запустить и протестировать прямо в консоли:
- Создаём цикл для переменной a, где мы перебираем значения a от 0 до 9.
- Внутри него такой же вложенный цикл для переменной b.
- Внутри этого вложенного цикла собираем два числа и перемножаем их. Чтобы собрать число ab, нужно a умножить на 10 и прибавить b. Аналогично для числа ba. Перемножаем их и сравниваем с искомым 2944.
- Если сравнение случилось, выводим результат в консоль
Итоговый код на JavaScript:
for (var a = 0; a <= 9; a++) {
for (var b = 0; b <= 9; b++) {
if ((a*10+b)*(b*10+a)==2944) {console.log(""+a+b+" * "+b+a+" = 2944")};
}
}
Можете скопировать, вставить в консоль браузера и проверить. Результат будет таким:
46 * 64 = 2944
64 * 46 = 2944