[模拟]神奇的幻方
神奇的幻方
解析
这是一道很水的水题,方法和条件都给了出来。直接暴力模拟。
代码
#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
int n,a[50][50];
int main(){
scanf("%d",&n);
int x,y;
x=1;
y=n/2+1;
a[x][y]=1;
for(int i=2;i<=n*n;i++){
if(x==1&&y!=n){ //判断是不是满足第一个条件
x=n;
y++;
a[x][y]=i;
continue; //执行完之后,跳到下一次循环。避免会重复执行下面的语句
}
if(x!=1&&y==n){ //判断是不是满足第二个条件
x--;
y=1;
a[x][y]=i;
continue; //同上
}
if(x==1&&y==n){ //判断是不是满足第三个条件
x++;
a[x][y]=i;
continue; //同上
}
if(x!=1&&y!=n){ //判断是不是满足第四个条件
if(a[x-1][y+1]==0){ //判断第右上角是不是没有填数
x--;
y++;
}
else{ //如果填了,就填在他的正下方
x++;
}
a[x][y]=i;
continue; //同上
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
printf("%d ",a[i][j]);
}
printf("\n"); //记得要换行
}
return 0;
}