该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
输出格式自己改改就行了
#include
#define N 40
int array[N][N] = {0};
struct Pos{
int row;
int col;
};
void print(int n){
int i, j;
for(i = 0; i < n; i++){
for(j = 0; j < n; j++)
printf("%-3d", array[i][j]);
printf("\n");
}
}
struct Pos getPos(int k, int n){
int i, j;
struct Pos p;
for(i = 0; i < n; i++){
for(j = 0; j < n; j++)
if(array[i][j] == k){
p.row = i;
p.col = j;
return p;
}
}
}
void fill(int n){
struct Pos p;
int k = 2;
array[0][n / 2] = 1;
while(k <= n*n){
p = getPos(k - 1, n);
if(p.row == 0 && p.col!= n-1)
array[n - 1][p.col + 1] = k++;
else if(p.row != 0 && p.col == n-1)
array[p.row - 1][0] = k++;
else if(p.row == 0 && p.col == n-1)
array[p.row + 1][p.col] = k++;
else if((p.row !=0 && p.col != n -1) && !array[p.row -1][p.col + 1])
array[p.row - 1][p.col + 1] = k++;
else
array[p.row + 1][p.col] = k++;
}
}
int main(){
int n;
scanf("%d", &n);
fill(n);
print(n);
return 0;
}