螺旋数组实现
n=4
1 | 2 | 3 | 4 |
12 | 13 | 14 | 5 |
11 | 16 | 15 | 6 |
10 | 9 | 8 | 7 |
n=5
1 | 2 | 3 | 4 | 5 |
16 | 17 | 18 | 19 | 6 |
15 | 24 | 25 | 20 | 7 |
14 | 23 | 22 | 21 | 8 |
13 | 12 | 11 | 10 | 9 |
简单的根据规律累加数字即可,注意几个边界条件的控制(向右 ,向下, 向左,向上的处理顺序)
如果把(向右 ,向下, 向左,向上的处理顺序)作为一次处理逻辑,那么一共进行 n/2次循环即可。
1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 5 int a[100][100]={0}; 6 7 void fun(int n) 8 { 9 10 int c =1,i,j; 11 for(i=0;i<n;i++) 12 for(j=0;j<n;j++) 13 a[i][j]=0; 14 for(i=0;i<n/2;i++) 15 { 16 for(j=0;j<n-i; j++) 17 { 18 if(a[i][j]==0) 19 a[i][j] =c++; 20 } 21 for(j=i+1;j<n-i;j++) 22 { 23 if(a[j][n-i-1]==0) 24 a[j][n-i-1]= c++; 25 } 26 for(j = n-i-1;j>i;j--) 27 { 28 if(a[n-i-1][j]==0) 29 a[n-i-1][j]=c++; 30 } 31 for(j=n-i-1;j>i;j--) 32 if(a[j][i]==0) 33 a[j][i]=c++; 34 } 35 if(n%2==1) a[n/2][n/2] =c; 36 37 for(i=0;i<n;i++) 38 { 39 for(j=0;j<n;j++) 40 { 41 cout<<a[i][j]<<"\t"; 42 } 43 cout<<endl; 44 } 45 } 46 47 int main() 48 { 49 int n; 50 while(cin>>n) 51 { 52 fun(n); 53 cout<<"---------------------------------"<<endl; 54 } 55 return 0; 56 }
结果如图所示: