神奇的幻方

来源:互联网 发布:tcl电视家网络电视 编辑:程序博客网 时间:2024/04/28 23:59

神奇的幻方

  • 学长说要把博客当错题本,好吧,今天确实考试了,QAQ…

  • 考的NOIP2015Day1的题,还比较简单,模拟就可以满分。对他们一定是拼手速的题吧。。。

自己写的代码片如下:

#include<iostream>#include<cstdio>using namespace std;int N,k;int a[100][100];int b[3000][3];int main(){    freopen("magic.in","r",stdin);    freopen("magic.out","w",stdout);    k=1;    scanf("%d",&N);    if(N==1) printf("1");    else{         a[1][N/2+1]=k;         ++k;         b[1][1]=1;b[1][2]=N/2+1;         while(k<=N*N)         {             if(b[k-1][1]==1&&b[k-1][2]!=N)             {                a[N][b[k-1][2]+1]=k;                b[k][1]=N;                b[k][2]=b[k-1][2]+1;                ++k;             }             else if(b[k-1][1]!=1&&b[k-1][2]==N)             {                a[b[k-1][1]-1][1]=k;                b[k][1]=b[k-1][1]-1;                b[k][2]=1;                ++k;             }             else if(b[k-1][1]==1&&b[k-1][2]==N)             {                a[b[k-1][1]+1][b[k-1][2]]=k;                b[k][1]=b[k-1][1]+1;                b[k][2]=b[k-1][2];                ++k;             }             else if(b[k-1][1]!=1&&b[k-1][2]!=N)             {                if(a[b[k-1][1]-1][b[k-1][2]+1]==0)                {                    a[b[k-1][1]-1][b[k-1][2]+1]=k;                    b[k][1]=b[k-1][1]-1;                    b[k][2]=b[k-1][2]+1;                    ++k;                }                else                 {                      a[b[k-1][1]+1][b[k-1][2]]=k;                   b[k][1]=b[k-1][1]+1;                   b[k][2]=b[k-1][2];                   ++k;                 }             }         }         for(int i=1;i<=N;++i)           {               for(int j=1;j<=N;++j)                   printf("%d ",a[i][j]);                printf("\n");           }    }    fclose(stdin);    fclose(stdout);    return 0;}
0 0
原创粉丝点击