1.按照矩形方式螺旋打印
int a[5][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};
int loop=3;
int x_=1;
int y_=5;
for(int i=0;i<loop;i++)
{
for(int x=x_-1;x<y_;x++)
{
cout<<a[x_-1][x]<<endl;
}
for(int x=x_+1-1;x<y_;x++)
{
cout<<a[x][y_-1]<<endl;
}
for(int x=y_-1-1;x>x_-1-1;x--)
{
cout<<a[y_-1][x]<<endl;
}
for(int x=y_-1-1;x>x_-1;x--)
{
cout<<a[x][x_-1]<<endl;
}
x_++;
y_--;
}
2.按照zig-zag方式打印矩阵
int s=0;
int squa=25;
int i=0;
int j=0;
int dir=0;
int N=5;
while(s<squa)
{
//数组赋值
cout<< a[i][j]<<endl;
//设置下一点(位置和方向)
switch(dir)
{
case 0:
//位置
j++;
//行进方向
if(0==i)
dir=1;
if(N-1==i)
dir=3;
break;
case 1:
i++;
j--;
if(N-1==i)
dir=0;
else if(0==j)
dir=2;
break;
case 2:
i++;
if(0==j)
dir=3;
if(N-1==j)
dir=1;
break;
case 3:
i--;
j++;
if(N-1==j)
dir=2;
else if(0==i)
dir=0;
break;
default:
break;
}
s++;
}
3.按照上三角方式打印矩阵
int main(){
int abtra[22][22]={0};
int n;
scanf("%d",&n);
int t=n;
for(int i=1; i<=n; ++i){
for(int j=1; j<=t; ++j)
abtra[i][j]=-1;
--t;
}
int nn=0;
for(int i=1;i<=n;++i)
nn+=i;
int k=1;
int i=1,j=1;
for(int t=1;t<=nn;++t){
if(k==1){
if(abtra[i][j]==-1)
abtra[i][j++]=t;
else{
k=2;++i;j-=2; //可以填入的位置都填满时需要改变方向
}
}
if(k==2){
if(abtra[i][j]==-1)
abtra[i++][j--]=t;
else{
k=3;i-=2;++j; //可以填入的位置都填满时需要改变方向
}
}
if(k==3){
if(abtra[i][j]==-1)
abtra[i--][j]=t;
else{
k=1;++i;++j;--t;
}
}
}
for(int i=1; i <= n; ++i){
for(int j=1; j <= n;++j){
if(abtra[i][j]==0)
break;
printf("%4d",abtra[i][j]); //按规格打印
}
printf("\n");
}
}