神奇的幻方
解析
這是一道很水的水題,方法和條件都給了出來。直接暴力模擬。
代碼
#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;
}