这个“打印蜗牛模式”代码如何工作?

时间:2011-11-17 17:29:29

标签: c math

#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");
    }
}

输出结果为:

        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

这段代码背后有什么数学基础?

编辑:我知道这段代码没用,也没用,也不能以其他方式使用。我只是对这段代码背后的数学基础感到好奇......

2 个答案:

答案 0 :(得分:5)

这似乎是某人试图以刻意复杂的方式做一些简单的事情。

对于每个单元格,它正在计算xy中的多项式。对于所有0&lt; = i&lt; = 4且0&lt; = j&lt; = 4,每个单元的值是项aijxiyj的和。

要计算多项式的系数aij,您可以替换xy的值以及每个单元格的所需结果。你将得到25个25个变量的线性方程组,可用基本线性代数求解。

请注意,此方法与螺旋模式的结果无关:它可用于打印任何结果,系数可能会有所不同。

答案 1 :(得分:0)

此代码的结果如下:

  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更改为73会导致错误结果)

我想这只是“纯粹的运气”,或者更简单的特定混淆代码来打印这种模式,但是我没有看到它背后的数学基础。