打印数组如下4*4数组,要求打印N*N的数组?
1 12 11 10
2 13 16 9
3 14 15 8
4 5 6 7
从上面可以看出该数组是逆时针顺序排序的,要打印这样的数组,得先画出示意图:
从图上,就可以看出:对于偶数阶矩阵,每一次要绕一圈完成一次数组外围的遍历,总共要循环n/2次;对于奇数阶,对于最后剩余的那个数要单独处理,即a[n/2][n/2],要单独赋值,贴代码如下:
#include <iostream>
using namespace std;
#define MaxSize 30
void print(int a[][MaxSize],int n)
{
int i,j,k,base=1;
for(i=0;i<n/2;i++)
{
for(j=i;j<n-i;j++)
a[i][j]=base++;
for(j=i+1;j<n-i;j++)
a[j][n-1-i]=base++;
for(j=n-2-i;j>=i;j--)
a[n-1-i][j]=base++;
for(j=n-2-i;j>i;j--)
a[j][i]=base++;
}
if(n%2==1)
a[n/2][n/2]=base;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
}
int main()
{
int a[MaxSize][MaxSize]={0},n;
cin>>n;
print(a,n);
}