Для сегодняшнего алгоритма мы собираемся написать функцию с именем beautifulDays
, которая будет принимать три целых числа в качестве входных данных: i
, j
и k
.
Представьте, что вы играете в игру с целыми числами, в которой вы находите разницу между числом и его обратной стороной. Пример: получить число 16 и перевернуть число 61. Если вычесть 16 из 61, вы получите 45. А теперь представьте, как вы применяете эту игру, чтобы узнать, когда идти в кино.
Вы хотите пойти в кино, но вы пойдете только в «прекрасный день». Прекрасный день определяется красивым числом. Красивое число - это когда вы обнаруживаете разницу между числом и его обратной стороной, и результат делится без остатка на определенное число k
.
Цель этой функции - взять диапазон чисел [i… j] и найти только красивые числа в этом диапазоне. Функция выведет общее количество красивых чисел в этом диапазоне. Приведем пример:
let i = 13; let j = 16; let k = 6;
Вы хотите пойти в кино в 13, 14, 15 и 16 дни. Это диапазон. Теперь нам нужно знать, какие дни прекрасны. Берем первое число в нашем диапазоне, 13:
31 — 13 = 18
18 / 6 = 3
Мы знаем, что день 13 прекрасен, потому что, взяв разницу между числом и его обратной стороной, мы делим ее на k
, и результат равен целому числу 3.
Проделаем то же самое с остальными числами в диапазоне:
14:
41 — 14 = 27
27 / 6 = 4.5
// not a whole number so 14 is not beautiful
15:
51 — 15 = 36
36 / 6 = 6
// a whole number so 15 is beautiful
16:
61 — 16 = 45
45 / 6 = 7.5
// not a whole number so 16 is not beautiful
Посмотрев на все числа в нашем диапазоне, мы обнаруживаем, что только два дня, 13 и 15, считаются красивыми. Функция вернет 2.
Давайте превратим это в код:
let beautiful = [];
Мы начинаем с создания пустого массива beautiful
, который будет содержать все красивые числа.
Затем мы перебираем диапазон, включая i и j.
for(let start = i; start <= j; start++){ let numString = start+""; let reverse = numString.split('').reverse().join(''); if((start - reverse*1) % k === 0){ beautiful.push(start) } }
Начиная с первого оператора, мы конвертируем каждое число в диапазоне в строку. Мы делаем это, объединяя число с пустой строкой.
let reverse = numString.split('').reverse().join('');
Затем, чтобы перевернуть строку, нам нужно подготовить строку, чтобы мы могли использовать метод JavaScript reverse()
. Обратный метод работает с массивами, поэтому мы используем метод split()
для разделения строки на массив подстрок.
Мы используем пустую строку ''
в качестве разделителя в нашем методе разделения, потому что мы хотим, чтобы строка разделялась между каждым символом. Теперь, когда наша строка представляет собой массив, мы можем перевернуть ее. Что дальше?
Мы превращаем массив обратно в строку, объединяя все символы в массиве вместе, чтобы сформировать строку. Здесь мы снова используем пустую строку в качестве разделителя, поскольку мы не хотим, чтобы что-либо разделяло каждый символ, когда мы присоединяемся к нашей строке.
if((start - reverse*1) % k === 0){ beautiful.push(start) }
В нашем if-выражении мы проверяем, красиво ли наше текущее число в диапазоне. Мы вычтем обратное число из исходного числа. Чтобы выполнить вычитание, нам нужно преобразовать обратное число обратно в целое. Мы делаем это, умножая строку на 1, и число снова становится целым. Теперь мы можем выполнить вычитание. Мы используем оператор по модулю %
, чтобы определить, делится ли наш результат вычитания равномерно на k
. Число, которое делится равномерно, будет выводить 0
, что означает отсутствие остатков. Если он делится равномерно, мы добавляем наше число из диапазона в массив beautiful
.
Когда мы закончили с нашим циклом, мы выводим количество красивых чисел в диапазоне. Мы получаем это путем вывода длины нашего массива beautiful
.
return beautiful.length;
Вот остальной код:
function beautifulDays(i, j, k) { let beautiful = []; for(let start = i; start <= j; start++){ let numString = start+""; let reverse = numString.split('').reverse().join(''); if((start - reverse*1) % k === 0){ beautiful.push(start) } } return beautiful.length; }
Если вы нашли этот алгоритм полезным или полезным, ознакомьтесь с другими моими решениями для алгоритмов JavaScript: