螺旋矩阵笔记

两道几乎一样的螺旋矩阵题,放在一起写了一下。

题目描述

给你一个 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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值