提交时间:2023-10-04 21:29:46

运行 ID: 104987

#include <iostream> #include <iomanip> using namespace std; int main() { int i, j, i1, j1, n, p, d[16][16]; cout << "请输入阶数(必须是奇数):"; while(1)//控制输入的阶数 { cin >> n; if( n<1 || n>10 ) continue; if( n>1 && n%2!=0 ) break; } for(i=1;i<n+1;++i)//数组初始化全为0 for(j=1;j<n+1;++j) d[i][j]=0; i=1; j=n/2+1; d[i][j]=1;//1位于第一行的正中间 for(p=2;p<=n*n;++p)//数字2、3、……、n*n的摆放 { //上一行,下一列 i1=i; j1=j; i--; j++; //可能的三种情况 if(i==0) i=n;//没有上一行的处理措施 if(j>n) j=1;//没有下一列的处理措施 if(d[i][j]!=0) {i=i1+1;j=j1;}//新位置已经放了数的处理措施 d[i][j]=p;//摆放 } for(i=1;i<n+1;++i)//输出魔方阵 { for(j=1;j<n+1;++j) cout<<setw(3)<<d[i][j]; cout<<endl; } return 0; }