题解:B3940 [GESP样题 四级] 填幻方

· · 题解

题目传送门

本蒟蒻的第一篇题解,管理员大大求过。

这道题很简单,直接模拟即可,我们可以用二维数组维护幻方,然后记录一下 xy (即为当前要填的数的坐标)kong (剩余空格数量)。

废话不多说,直接上AC代码:

#include<bits/stdc++.h>
using namespace std;
int a[25][25],x=1,y,n,kong,ans=1;
int main(){
    cin>>n;
    kong=n*n;
    y=n/2+1;
    while(kong--)
    {
        a[x][y]=ans;
        ans++;
        int xx,yy;
        xx=x-1;
        if(xx<=0) xx=n;
        yy=y+1;
        if(yy>n) yy=1;
        if(a[xx][yy]!=0)
        {
            xx=x,yy=y;
            xx++;
            if(xx>n) xx=1;
        }
        x=xx,y=yy;
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++) cout<<a[i][j]<<" ";
        cout<<endl;
    }
    return 0;
}

完结撒花!!!

管理员大大求过啊啊啊