Задача простая, из интересного - преобразование чисел из строки в массив чисел.
Условия задачи
В таблице 20×20 (внизу) четыре числа на одной диагонали выделены красным.
Произведение этих чисел 26 × 63 × 78 × 14 = 1788696.
Каково наибольшее произведение четырех подряд идущих чисел в таблице 20×20, расположенных в любом направлении (вверх, вниз, вправо, влево или по диагонали)?
Преобразовываю таблицу в удобный формат
Для удобства работы преобразую числа в двумерный массив. Для этого сделаю несколько преобразований.
Преобразовываю число в строку
Алгоритм действий такой же как в задаче Эйлера #8.
Объявляю строку:
num_str[] = {""};
Скопировал внутрь кавычек цифры из задания.
Проверил себя, все ли цифры занесены в строку:
int str_len = strlen(num_str);
С помощью функции strlen() измерил длину строки ((2-значное число + пробел между числами) * 20 чисел * 20 строк = 1200).
Преобразовываю строку в двумерный массив
В этот раз для преобразования символов в цифры не стал пользоваться функцией atoi() как в прошлый раз, а воспользовался советом товарища и сделал проще.
Идея в том, что каждый символ имеет свой код и хранится в виде числа. Так, например, '0' имеет код 48, '1' - 49... и так далее. Необходимо просто вычесть 48 из кода символа числа и получится искомое число.
num = (num_str[indx] - 48)*10;
num += num_str[++indx] - 48;
Ищу наибольшее произведение четырех последовательных цифр
В цикле перебираются цифры из массива и перемножаются на три последующих в ряду. Направление ряда чисел задается их координатами в массиве. Надеюсь, из кода все понятно.
Ответ на задачу:
Время работы примерно 0.4 секунды.
Из улучшений, думаю, можно продумать механизм "невычисления" произведения, в котором попадается ноль.
P.S. Изначальная цель блога - получить "фидбек" в комментариях, чтобы более опытные "кодеры" указывали мне на ошибки, советовали и всячески помогали в саморазвитии.
Также приглашаю всех на мой сайт)
На нем Вы можете посмотреть ответ на задачу Эйлера #11 (когда необходима лишь небольшая подсказка) и последний, самый быстрый вариант решения.
В общем, добро пожаловать на канал))