COGS 2104. [NOIP2015]神奇的幻方

★   输入文件:2015magic.in   输出文件:2015magic.out   简单对比
时间限制:1 s   内存限制:256 MB

 模拟

一开始数组开小了。。

屠龙宝刀点击就送

#include <cstdio>
int n,h[1600],l[1600],hf[45][45];
int main()
{
    freopen("2015magic.in","r",stdin);freopen("2015magic.out","w",stdout);
    scanf("%d",&n);
    hf[1][n/2+1]=1;
    h[1]=1;l[1]=n/2+1;
    for(int i=2;i<=n*n;++i)
    {
        if(h[i-1]==1&&l[i-1]!=n) h[i]=n,l[i]=l[i-1]+1,hf[h[i]][l[i]]=i;
        else if(h[i-1]!=1&&l[i-1]==n) h[i]=h[i-1]-1,l[i]=1,hf[h[i]][l[i]]=i;
        else if(h[i-1]==1&&l[i-1]==n) h[i]=h[i-1]+1,l[i]=l[i-1],hf[h[i]][l[i]]=i;
        else if(h[i-1]!=1&&l[i-1]!=n)
        {
            if(!hf[h[i-1]-1][l[i-1]+1])
            h[i]=h[i-1]-1,l[i]=l[i-1]+1,hf[h[i]][l[i]]=i;
            else h[i]=h[i-1]+1,l[i]=l[i-1],hf[h[i]][l[i]]=i;
        }
    }
    for(int i=1;i<=n;++i)
     for(int j=1;j<=n;++j)
      j!=n?printf("%d ",hf[i][j]):printf("%d\n",hf[i][j]);
    return 0;
}

 

posted @ 2017-08-25 21:24  杀猪状元  阅读(150)  评论(0编辑  收藏  举报