解析 这是一道很水的水题,方法和条件都给了出来。直接暴力模拟。
代码
#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; }