天天看點

洛谷P2615 神奇的幻方(NOIp2015)模拟

模拟

題目傳送門

簡單模拟,按照題目給你的方法填就行了。

劃水代碼:

#include<cstdio>
#include<cstring>
#include<algorithm>
#define MAXN 39
#define MAXM 1521
using namespace std;
int n;
int a[MAXN+][MAXN+],f[MAXM+][];
int main(){
    scanf("%d",&n);
    a[][n/+]=; f[][]=; f[][]=n/+;
    for (int i=;i<=n*n;i++){
        int x=f[i-][],y=f[i-][];
        if (x==&&y!=n){
            a[n][y+]=i; f[i][]=n; f[i][]=y+;
        }
        if (x!=&&y==n){
            a[x-][]=i; f[i][]=x-; f[i][]=;
        }
        if (x==&&y==n){
            a[x+][y]=i; f[i][]=x+; f[i][]=y;
        }
        if (x!=&&y!=n)
            if (!a[x-][y+]){
                a[x-][y+]=i; f[i][]=x-; f[i][]=y+;
            }
            else{
                a[x+][y]=i; f[i][]=x+; f[i][]=y;
            }
    }
    for (int i=;i<=n;i++){
        for (int j=;j<=n;j++)
            printf("%d ",a[i][j]);
        printf("\n");
    }
    return ;
}