#define BEGIN 2
int _tmain(int argc, _TCHAR* argv[])
{
int n;
cout<<"输入矩阵大小:"<<endl;
while(cin>>n && n != 0){
//construct parameter
int len_para = 2*n-1;
while(len_para%4 != 0)
len_para++;
int *para = new int[len_para];
for(int i=0; i<len_para/2; i++){
para[2*i] = n-i;
para[2*i+1] = n-i-1;
}
para[0] = n-1;
//construct matrix
int row=0,colum=0;
int *matrix = new int[n*n];
int count = 1+ (matrix[0]=BEGIN);
for(int i=0; i<len_para/4; i++){
int *tmp = para + 4*i;
while(tmp[0]-- > 0)
matrix[row*n + ++colum] = count++;
while(tmp[1]-- > 0)
matrix[++row*n + colum] = count++;
while(tmp[2]-- > 0)
matrix[row*n + --colum] = count++;
while(tmp[3]-- > 0)
matrix[--row*n + colum] = count++;
}
//print matrix
cout<<"Begin to print matrix:"<<endl;
int len, tmp = n*n+BEGIN-1;
for(len=0; tmp/=10; len++);
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
cout<<setw(len+2)<<matrix[i*n + j];
}
cout<<endl;
}
delete para;
delete matrix;
cout<<endl<<"输入任意自然数继续,0退出"<<endl<<endl;
}
return 0;
}
结果: