2011-11-17 60 views
3
#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 

什麼數學基礎是這後面的代碼?

編輯:我知道這個代碼是無用的,毫無價值,並且不能以任何其他方式使用。我只是好奇這個代碼背後的數學基礎...

+1

Ammmmm ...什麼? –

+0

不太確定這個問題的重點是什麼,它看起來像一堆數學,臨屋區所有 –

+0

對不起,我忘了添加一個輸出! – SHH

回答

5

這看起來像有人試圖以故意複雜的方式做一些簡單的事情。

對於每個單元格,它正在計算xy中的多項式。每個單元格的值是所有的aijxiyj的總和,其中0爲< = 1 < = 4和0 < = j< = 4。

要計算多項式的係數aij,可以用xy的值替換每個單元格的所需結果。你會得到25個線性方程,其中有25個變量,可以用基本的線性代數求解。

請注意,此方法與結果爲螺旋模式無關:可用於打印任何結果,係數可能不同。

+0

非常感謝! – SHH

+0

這當然是解決這個問題的一種方法,但除非犯罪者在獲得所需的多項式後不費力地將術語分組,否則我認爲OP顯示瞭解決這個問題的另一種方法。 – Jacob

+0

嗯..我不確定作者是否將這些術語有意混淆了代碼,或者他可能以另一種方式解決了這個問題(這將在過程中對上述術語進行分組)。 – SHH

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 

它看起來確實像數字遵循蝸牛模式,但它並不適用於工作方形尺寸更大,也更小。 (改變573給出了不好的結果)

我想這只不過是「純粹的運氣」,或者更簡單地說具體的混淆代碼,以打印模式,但後面沒有數學基礎,以盡我所能看到。