两道几乎一样的螺旋矩阵题,放在一起写了一下。
题目描述
给你一个 n 行 m 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,输出矩阵中的所有元素。
输入格式
输出格式
无
输入输出样例
输入 #1复制
3 3 1 2 3 4 5 6 7 8 9
输出 #1复制
1 2 3 6 9 8 7 4 5
输入 #2复制
3 4 1 2 3 4 5 6 7 8 9 10 11 12
输出 #2复制
1 2 3 4 8 12 11 10 9 5 6 7
说明/提示
1≤n,m≤10
−100≤matrix[i][j]≤100
代码如下:
#include<stdio.h>
int result[110];
int main()
{
int n,m;
scanf("%d%d",&n,&m);
int matrix[15][15];
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
scanf("%d",&matrix[i][j]);
int top=0,bottom=n-1,left=0,right=m-1;
int direction=0,idx=0;//idx记录的是结果数组的下标
while(top<=bottom&&left<=right)
{
if(direction==0){//向右
for(int i=left;i<=right;i++)
{
result[idx++]=matrix[top][i];
}
top++;
}
else if(direction==1)//向下
{
for(int i=top;i<=bottom;i++)
{
result[idx++]=matrix[i][right];
}
right--;
}
else if(direction==2)//向左
{
for(int i=right;i>=left;i--)
{
result[idx++]=matrix[bottom][i];
}
bottom--;
}
else if(direction==3)向上
{
for(int i=bottom;i>=top;i--)
{
result[idx++]=matrix[i][left];
}
left++;
}
direction=(direction+1)%4;
}
for(int i=0;i<n*m;i++)
printf("%d ",result[i]);
return 0;
}
题目描述
给你一个整数n,输出n∗n的snake矩阵。
输入格式
输入一行,包含一个整数n
输出格式
输出n行,每行包含n个正整数,通过空格分隔。
1<=n<=1000
输入输出样例
输入 #1复制
4
输出 #1复制
1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7
代码如下:
#include<stdio.h>
int result[1000010],idx;
int matrix[1010][1010];
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n*n;i++)
{
result[i]=i+1;
}
int top=0,bottom=n-1,left=0,right=n-1;
int direction=0;
while(top<=bottom&&left<=right)
{
if(direction==0)
{
for(int i=left;i<=right;i++)
matrix[top][i]=result[idx++];
top++;
}
else if(direction==1)
{
for(int i=top;i<=bottom;i++)
matrix[i][right]=result[idx++];
right--;
}
else if(direction==2)
{
for(int i=right;i>=left;i--)
matrix[bottom][i]=result[idx++];
bottom--;
}
else if(direction==3)
{
for(int i=bottom;i>=top;i--)
matrix[i][left]=result[idx++];
left++;
}
direction=(direction+1)%4;
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
printf("%d ",matrix[i][j]);
printf("\n");
}
return 0;
}