22:神奇的幻方/NOI / 1.8程式設計基礎之多維陣列
阿新 • • 發佈:2018-12-18
- 總時間限制:
- 1000ms
- 記憶體限制:
- 65535kB
- 描述
-
幻方是一個很神奇的N*N矩陣,它的每行、每列與對角線,加起來的數字和都是相同的。
我們可以通過以下方法構建一個幻方。(階數為奇數)
1.第一個數字寫在第一行的中間
2.下一個數字,都寫在上一個數字的右上方:
a.如果該數字在第一行,則下一個數字寫在最後一行,列數為該數字的右一列
b.如果該數字在最後一列,則下一個數字寫在第一列,行數為該數字的上一行
c.如果該數字在右上角,或者該數字的右上方已有數字,則下一個數字寫在該數字的下方 - 輸入
- 一個數字N(N<=20)
- 輸出
- 按上方法構造的2N-1 * 2N-1的幻方
- 樣例輸入
-
3
- 樣例輸出
-
17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3
11 18 25 2 9
-
//OpenJudge - 神奇的幻方 #include<iostream> #include<stdio.h> using namespace std; int main() { int a[40][40]={0}; int n,nc; cin>>n; int length; length =2*n-1; nc = length*length; int i,j; int ipre,jpre; for(i=0;i<nc;i++) { if(i==0) { ipre=0; jpre=n-1; a[ipre][jpre]=i+1; continue; } else if(ipre==0 && jpre!=length-1 ) { ipre=length-1; jpre=jpre+1; a[ipre][jpre]=i+1; } else if(jpre == length -1 &&ipre != 0) { ipre=ipre-1; jpre=0; a[ipre][jpre]=i+1; } else if((ipre == 0&& jpre==length-1)||a[ipre-1][jpre+1]!=0) { ipre=ipre+1; jpre=jpre; a[ipre][jpre]=i+1; } else { ipre=ipre-1; jpre=jpre+1; a[ipre][jpre]=i+1; } } for(i=0;i<length;i++) { for(j=0;j<length;j++) if(j==0) cout<<a[i][j]; else cout<<" "<<a[i][j]; cout<<endl; } return 0; }
-