您的位置:首页 > 其它

·蒟蒻」神奇的的幻方

2016-11-17 15:51 155 查看

神奇的幻方

/*
1. 若(K-1) 在第一行但不在最后一列,则将K填在最后一行,(K-1) 所在列的右一列;
2. 若(K-1) 在最后一列但不在第一行,则将K填在第一列,(K-1) 所在行的上一行;
3. 若(K-1) 在第一行最后一列,则将K填在(K-1) 的正下方;
4. 若(K-1) 既不在第一行,也不在最后一列,如果(K-1) 的右上方还未填数,则将K填在(K-1)的右上方,
否则将K填在(K-1)的正下方。
*/
#include<iostream>
#include<cstdio>
using namespace std;
int n,a[ 40][ 40],x,y;
void magic( );

int main( ){
//freopen( "magic.in","r",stdin);
//freopen( "magic.out","w",stdout);
magic( );
return 0;
}

void magic( ){
scanf( "%d",&n);
int sum=n*n;
x=1,y=n/2+1;
a[ x][ y]=1;
for( int i=2;i<=sum;i++){
if( x==1&&y!=n){
a[ n][ y+1]=i;
x=n,y+=1;
continue;
}
if( x!=1&&y==n){
a[ x-1][ 1]=i;
x-=1,y=1;
continue;
}
if( x==1&&y==n){
a[ x+1][ y]=i;
x+=1;
continue;
}
if( x!=1&&y!=n){
if( a[ x-1][ y+1]==0){
a[ x-1][ y+1]=i;
x-=1,y+=1;
}
else{
a[ x+1][ y]=i;
x+=1;
}
continue;
}
}
for( int i=1;i<=n;i++){
for( int j=1;j<=n;j++){
printf( "%d ",a[ i][ j]);
}
printf( "\n");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: