2009年10月30日 星期五

魔方陣

 
N 階奇數魔方陣:
void magic (int n)
{   
    int m [9*9] = {0};
    int i=0, o=n-1, r=0, c=n/2;

    while (i < n*n) {
        m [r*n+c] = ++i; 
        i%n? (r?--r:r=o), c-o?++c: c=0: ++r;
    }
    while (i--) 
        printf ("%3d%c", m[i], i%n?' ':'\n');  
    puts ("");                              
}

int main (/* daviddr 081224 */)
{    
    return magic(5), getch();
}

針對(2k+1)*(2k+1)方陣,傳統製作方法是: 1. 以 (k,0) 做為起點。 ┌─┬─┬─┐ │ │1│ │ ├─┼─┼─┤ │ │ │ │ ├─┼─┼─┤ │ │ │ │ └─┴─┴─┘ 2. 朝右上方移動 (令x++,y--),遇到邊緣則繞捲。 ┌─┬─┬─┐ │ │1│ │ ├─┼─┼─┤ │ │ │ │ ├─┼─┼─┤ │ │ │2│ (2由上往下繞捲到此處) └─┴─┴─┘ ┌─┬─┬─┐ │ │1│ │ ├─┼─┼─┤ │3│ │ │ (3由右往左繞捲到此處) ├─┼─┼─┤ │ │ │2│ └─┴─┴─┘ 3. 當(x,y)處的右上方已有數字時,便往下放在(x,y+1) 放置時遇到邊緣則繞捲。 ┌─┬─┬─┐ │ │1│ │ ├─┼─┼─┤ │3│ │ │ ├─┼─┼─┤ │4│ │2│ └─┴─┴─┘ 4. 重複此法填到最後一個數字。

沒有留言:

張貼留言