NOIP2015神奇的幻方(提高组T1)————模拟,数学

题解:本题主要考查模拟,数学。关键是读题,知道构幻方的规律,把幻方看做立体的就不怕边界。注意数字重合和重复问题。
代码如下:

#include <iostream>
using namespace std;
int a[40][40],n,i,j,k;
int main()
{
    cin>>n;
    a[1][n/2+1]=1;
    j=1;k=n/2+1;
    for(i=2;i<=n*n;i++)
    {
     if(j==1&&k!=n)
     if(a[n][k+1]==0){a[n][k+1]=i;j=n;k=k+1;continue;}
     else{a[j+1][k]=i;j=j+1;continue;}

     if(j!=n&&k==n&&j!=1)
     if(a[j-1][1]==0){a[j-1][1]=i;j=j-1;k=1;continue;}
     else{a[j+1][k]=i;j=j+1;continue;}

     if(j==1&&k==n)
     if(a[n][1]==0){a[n][1]=i;j=n;k=1;continue;}
     else{a[j+1][k]=i;j=j+1;continue;}

     if(j==n&&k==n)
     if(a[j-1][1]==0){a[j-1][1]=i;j=j-1;k=1;continue;}
     else{a[1][k]=i;j=1;continue;}

     if(j!=1&&k!=n)
     if(a[j-1][k+1]==0){a[j-1][k+1]=i;j=j-1;k=k+1;continue;}
     else{a[j+1][k]=i;j=j+1;continue;}

    }
    for(j=1;j<=n;j++)
    {
    for(k=1;k<=n;k++)
    cout<<a[j][k]<<" ";
    cout<<endl;
    }
    return 0;    
}

猜你喜欢

转载自blog.csdn.net/wly1127/article/details/82469862