题意:输入n,输出对应格式的n*n方阵
思路:水题。填数的顺序方向为下->左->上->右,填数之前判断累加数是否等于n*n,填的位置是否超过了方阵的范围和该位置是否已经有数,进行循环判断就行ok了。
#include <iostream>
#include <cstring>
using namespace std;
int num[110][110];
int main()
{
int n;
int x=0,y,all=1;
cin>>n;
y=n-1;
memset(num,0,sizeof(num));
num[x][y]=1;
for(int i=0;i<4;){
if(all==n*n)
break;
if(i==0){
if(x+1<n && !num[x+1][y]){
num[++x][y]=++all;
}
else{
i=1;
}
}
if(i==1){
if(y-1>=0 && !num[x][y-1]){
num[x][--y]=++all;
}else{
i=2;
}
}
if(i==2){
if(x-1>=0 && !num[x-1][y]){
num[--x][y]=++all;
}else{
i=3;
}
}
if(i==3){
if(y+1<n && !num[x][y+1]){
num[x][++y]=++all;
}
else{
i=0;
}
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cout<<num[i][j];
if(j==n-1){
cout<<endl;
}else{
cout<<" ";
}
}
}
return 0;
}