Как этот код "печатает рисунок улитки"?

#include <stdio.h>
int main()
{
 int i;
 int x;
 int y;
 for (x = 1; x <= 5; x++)
 {
 for (y = 1; y <= 5; y++)
 {
 i = 7848 + y * (-29412 + y * (23130 + y * (-6660 + y * 630)))
 + x * (-16668 + y * (56629 + y * (-44066 + y * (12612 + y * -1186))))
 + x * x * (11910 + y * (-35522 + y * (27183 + y * (-7696 + y * 717))))
 + x * x * x * (-3420 + y * (9204 + y * (-6844 + y * (1908 + y * -176))))
 + x * x * x * x * (330 + y * (-826 + y * (597 + y * (-164 + y * 15))));
 printf("%2d ", i/72);
 }
 printf("\n");
 }
}
</stdio.h>

Вывод:

1 2 3 4 5
 16 17 18 19 6
 15 24 25 20 7
 14 23 22 21 8
 13 12 11 10 9

Какая математическая основа стоит за этим кодом?

EDIT: Я знаю, что этот код бесполезен и бесполезен и не может использоваться каким-либо другим способом. Мне просто интересно узнать математическую основу этого кода...

2 ответа

Похоже, кто-то пытается сделать что-то простое намеренно сложным способом.

Для каждой ячейки он вычисляет многочлен в x и y. Значение в каждой ячейке представляет собой сумму термов a<sub>ij</sub>x<sup>i</sup>y<sup>j</sup> для всех 0 <= я <=4 и 0 <=j <=4.

Чтобы вычислить коэффициенты a<sub>ij</sub> многочлена, вы можете подставить значения x и y и желаемый результат для каждой ячейки. Вы получите 25 линейных уравнений с 25 переменными, которые могут быть решены с помощью основной линейной алгебры.

Обратите внимание, что этот метод не имеет никакого отношения к результату, являющемуся спиральным шаблоном: он может использоваться для печати любого результата, коэффициенты будут просто разными.


Результат этого кода выглядит следующим образом:

1 2 3 4 5 
 16 17 18 19 6
 15 24 25 20 7 
 14 23 22 21 8 
 13 12 11 10 9

Похоже, что цифры соответствуют рисунку улитки, но это не работает для квадратного размера больше или меньше. (изменение 5 до 7 или 3 дает плохие результаты)

Я предполагаю, что это просто "чистое удача" или более просто определенный запутанный код для печати этого шаблона, но для этого нет математической основы, насколько я могу видеть.

licensed under cc by-sa 3.0 with attribution.