画坐标时,横纵坐标不同,又a[i][j]写成a[i]了。通过分治注意范围。
#include<iostream>
using namespace std;
int a[20][20]={0};
void fun(int i,int j,int n,int t){
if(n<=0) return;
else if(n==1){
a[i][j]=t;
return;
}
for(int k=j;k<j+n-1;k++){
a[i][k]=t;
t++;
}
for(int k=i;k<i+n-1;k++){
a[k][j+n-1]=t;
t++;
}
for(int k=j+n-1;k>j;k--){
a[i+n-1][k]=t;
t++;
}
for(int k=i+n-1;k>i;k--){
a[k][j]=t;
t++;
}
fun(i+1,j+1,n-2,t);
}
int main(){
int i=0,j=0,n;//分别初始位置和大小
cin>>n;
fun(i,j,n,1);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cout<<a[i][j];
if(j!=n-1)
cout<<" ";
}
cout<<endl;
}
return 0;
}</iostream>