K - 矩阵生成
P2615 [NOIP2015 提高组] 神奇的幻方
首先开一组循环输入。然后将第一行中间的数赋值为1,定义一个x,y表示当前位置,把x赋值为1,y赋值为(n+1)/2.
其次在开一组循环,根据x,y的值(即K-1的坐标)情况判断怎么填写数字,在填写数字完毕后将x,y的值赋为当前坐标。
最后当循环数到达n*n后结束并输出
#include<bits/stdc++.h>
using namespace std;
const int N = 110;
int a[N][N];
int main()
{
int n;cin>>n;
int x=1,y=(n+1)/2;
a[x][y]=1;
for(int i=2; i<=n*n; i++)
{
if(x==1&&y!=n)
{
x=n;
y++;
}
else if(x!=1&&y==n)
{
x--;
y=1;
}
else if(x==1&&y==n) x++;
else if(!a[x-1][y+1])
{
x--;
y++;
}
else x++;
a[x][y]=i;
}
for(int i=1; i<=n; i++)
{
cout << a[i][1];
for (int j=2; j<=n; j++) cout << ' ' << a[i][j];
cout << endl;
}
return 0;
}