Если выписать числа в диагоналях спирали в ряд, то в итоге становится заметным определенный алгоритм изменения чисел.
В углах каждого уровня спирали (кроме начального) находятся четыре числа. Они отличаются друг от друга на одну и ту же величину – шаг (step – расстояние между углами).
Однако при этом шаг (step) не является неизменным. Сторона спирали (size_helix) увеличивается с каждым уровнем и шаг (расстояние между углами спирали) соответственно тоже.
Алгоритм программы в итоге основан на последовательном вычислении чисел диагоналей спирали на основе этих закономерностей.
Описание работы программы
Сторону спирали (1001), до которой производятся вычисления, запишем через #define. Сделаем так, потому что это позволяет не искать данную величину по всему коду, если в итоге нам понадобится вычислить диагонали спирали других размеров.
На каждом уровне числовой спирали находится по четыре числа, за исключением начального уровня. Потому первое значение (1) сразу занесем в num – текущее число и answ – сумма диагоналей.
После этого складываются числа на каждом уровне спирали (четыре числа расположенные через расстояние step друг от друга). При переходе на следующий уровень изменяется как шаг, так и сторона спирали. Вычисления закончатся, когда в итоге сторона спирали превысит искомую величину.
Измеряем время работы программы
Для измерения времени работы программы подключаем библиотеку time.h:
#include <time.h>
С помощью функции clock() измеряем время начала (begin) и окончания (end) работы программы. В итоге время работы будем находить как разность между ними.
CLOCKS_PER_SEC – это константа, сохраненная в библиотеке и зависящая от типа устройства, на котором запускается программа. В данном случае – это просто 1000
Ответ и скорость работы программы (проект Эйлера - 28 задача)
В итоге ответ на 28 задачу проекта Эйлера составил 669171001,программа считает ответ мгновенно – за 0 миллисекунд.
По традиции хотелось бы выразить глубочайшую признательность Сергею Балакиреву за его титанический труд по созданию бесплатных курсов и в частности, за “Язык программирования C/C++ для начинающих“.
Есть вопросы, господа? Отвечаем спокойно, четко и только по делу))