二维数组回旋矩阵分析与解法c语言

本文介绍了如何根据题目描述生成n*n的回型矩阵,通过分析数字的螺旋排列规律和四个方向的增长,提供了一个C语言的代码实现。文章强调了对奇数和偶数处理的不同以及数组打印的逻辑。
摘要由CSDN通过智能技术生成

1.题目介绍

描述

给你一个整数n,按要求输出n∗n的回型矩阵

输入描述:

输入一行,包含一个整数n

1<=n<=19

输出描述:

输出n行,每行包含n个正整数.

示例:

 2.题目分析

由题干与上面示例可知数字是螺旋(回旋)输出的。

我们要寻找到数组的规律:以示例为例子

观察两图片,n=4时与n=5时数字都旋转了两个圈,唯一不同时n=5时数组中间为25.

由此可知数字旋转的圈数实际为n/2,当n为奇数时中间的数字为n*n。

数字是由1开始按照→↓←↑的顺序逐渐增加,我们按照此顺序寻找规律,并将规律转化为代码的形式。

a.→方向分析

观察图片中箭头指向→的数字。第一行数字横坐标为零,纵坐标从0增加到3结束(4个数字),第二行横坐标为1,纵坐标从1到2结束(共两个数字)。

b.↓方向分析

观察图片中箭头指向↓的数字。外面一列下标为4,横坐标从0增加到3结束(4个数字),前一列纵坐标为3,横坐标从1到2(两个数字)。

c.←方向分析

观察图片中箭头指向←的数字。底下一行横坐标为4,纵坐标从4到1(4个数字),上一行横坐标为3,纵坐标从3到2(两个数字)。

d.↑方向分析

观察图片中箭头指向↑的数字。第一列纵坐标为0,横坐标从4到1(4个数字),后一列纵坐标为1,横坐标从3到2(两个数字)

3.代码

1.代码分析

定义题目需要的相关变量:N(题目输入的n),n(控制数字循环圈数),i(控制横坐标),j(控制纵坐标),num(表示从1递增的数字)。

由上面分析N为奇数时数组中心位置数字为N*N。所以代码要先对对N是奇数还是偶数进行判断。

在根据↑↓←→方向规律写出代码.此过程中同一圈→与←是横坐标不发生变化,↑↓是纵坐标不发生变化,可以根据圈数n与输入的N控制。变化的坐标根据从哪开始打印几个到哪结束,根据N,n进行控制。

最后打印数组

2.实现代码
int main()
{
	int N = 0, num = 1;
	int i, j;
	int n;
	int arr[20][20] = { 0 };
	scanf("%d", &N);
	//判断N是不是奇数
	if (N % 2 != 0)
	{
		arr[N / 2][N / 2] = N * N;
	}
	for (n = 0; n < N / 2; n++)
	{
		//→方向
		for (j = n; j < N - n - 1; j++)
		{
			arr[n][j] = num++;
		}
		//↓方向
		for (i = n; i < N - n - 1; i++)
		{
			arr[i][N - n - 1] = num++;
		}
		//左反向
		for (j = N - n - 1; j >= n + 1; j--)
		{
			arr[N - n - 1][j] = num++;
		}
		//↑方向
		for (i = N - n - 1; i >= n + 1; i--)
		{
			arr[i][n] = num++;
		}
	}
	for (i = 0; i < N; i++)
	{
		for (j = 0; j < N; j++)
		{
			printf("%2d ", arr[i][j]);
		}
		printf("\n");
	}
	return 0;
}

4结尾

此题是根据运行结果,根据同一方向的变化,寻找相似点,找出规律。

可以根据此题为入手,对于这种类似题型有大概思考的方向,为以后解决问题打下基础。

下一篇也是相关二维数组的题型,题目名称为蛇形矩阵。题目如下:

大家可以写一写这道题,提升自己,具体解决方法在下一篇文章中,欢迎大家一起学习讨论。

此文章中方法或代码有错误或可以优化地方欢迎大家提出来,我及时修改改正,喜欢此文章的,感觉对自己有帮助的,不要忘了关注加点赞。

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值