栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

旋转矩阵,可以解决矩阵也可以解决方阵,c语言,简单实验代码

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

旋转矩阵,可以解决矩阵也可以解决方阵,c语言,简单实验代码

题目: 整数1、2、…、n从外层至中心按顺时针 方向螺旋排列所成n*m
矩阵,称为顺转n*m阶矩阵。输入 整数n,m,输出顺转n*m阶矩阵。 输入样例: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
  想法:

对于这道题我们肯定是要实现所有结果的可能性,我们可以实现一个数组来表示方向

 第一步就是向右边走,第二步向下面走,第三步向左边走,第四步向上面走,由于我们主要是面向矩阵写的所以我们就将1,2两部看成一个整体,3,4看成一个整体,因为第一步是与列长度有关的,第二步是与行的长度有关系的,这是不同的所以我们必须分开来算.我们先看下四个方向

int f[4][2]={{0,1},{1,0},{0,-1},{-1,0}};                //4个方向 

我们将四个方向设置好就可以了,然后用一个变量k来进行循环遍历就好了,值得一提的是循环遍历一下会发现它总共会循环n+m次然后因为我们每次是循环两次的所以总的循环数我们除以二不管n+m是偶数还是奇数进行的循环数就都是正确的,里面p,q全局进行跟踪每次计算完成后让p,q更新就好了,看下面的完整代码

#include
#include
#define max 105
int arr[max][max];
int f[4][2]={{0,1},{1,0},{0,-1},{-1,0}};                //4个方向 
int main()
{
	int n,m,i,j,k=0,flag=0,N,M,p=1,q=0;                        //p和q是坐标开始值从1,0开始计算,第一个值就是1,1 
	scanf("%d%d",&n,&m);
	N=m,M=n;
	memset(arr,0,sizeof(arr));                        //初始化
	for(i=0;i<(N+M)/2;i++)
	{
		for(j=0;j 

我们看看结果的输出:

首先是7*7的方阵

 其次是8*9的矩阵

 结果都是完全正确的!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/836178.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号