【ACM】魔方矩陣
阿新 • • 發佈:2018-11-06
輸出魔方矩陣
1、將1放在第一行中間一列;
2、從2開始直到n×n止各數依次按下列規則存放;每一個數存放的行比前一個數的行數減1,列數加1;
3、如果上一個數的行數為1,則下一個數的行數為n(指最下一行);例如1在第一行,則2應放在最下一行,列數同樣加1;
4、當上一個數的列數為n時,下一個數的列數應為1,行數減去1。例如2在第3行最後一列,則3應放在第二行第一列;
5、如果按上面規則確定的位置上已有數,或上一個數是第一行第n列時,則把下一個數放在上一個數的下面。例如按上面的規定,4應該放在第1行第2列,但該位置已經被佔據,所以4就放在3的下面;
#include "stdio.h" #include "string.h" #define N 10 #include <iostream> using namespace std; int a[N][N]; int main () { int preline,precol,line,col,mid,n,i,j; memset(a,0,sizeof(a)); cin>>n; mid=(n+1)/2; a[1][mid]=1; line=1; col=mid; for(i=2;i<=n*n;i++) { preline=line; precol=col; if(line==1) line=n; else line--; if(col==n) col=1; else col++; if(a[line][col]) { if(preline==n) { line=1; } else { line=preline+1; } col=precol; } a[line][col]=i; } for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { printf("%5d",a[i][j]); } cout<<endl; } return 0; }