打印回型矩阵<——>蛇形矩阵(C语言)

这篇具有很好参考价值的文章主要介绍了打印回型矩阵<——>蛇形矩阵(C语言)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一:回型矩阵

二:蛇形矩形


一:回型矩阵

题目要求,用户输入一个数得到这样一个图形

打印蛇形矩阵,矩阵,算法,c语言,c++

 加入用户输入的是4,可以看出这是一个4*4的矩形,也就可以用二维数组来存放这个矩形。外卖可以看出这个矩形的规律就是

左——>右        依次递增

上——>下        依次递增

右——>左        依次递增

下——>上        依次递增

然后又重复这个动作,那么我们就可以考虑,实际这个4*4的矩形方正有16个数。那么我们拿一个数count来作为这个依次递增的数,每一次递增就让count++,当count小于等于16的时候就让count停止++。然后在看无论左——右,上——下都可以把它的第一个数看作一个起点,然后这个数++到终点,那么我们可以定义一个start(起点对应下标为0)和end(对应下标为n-1)来作为起点和终点。

既然要重复左——右,上——下这样的动作那就需要循环,我们在内层循环里面来控制。然后我们开始打印第一行

从左——>右的时候就可以是strat作为数组的行,i作为列,让i每次++,count也每次++然后把count里面的值放进数组里面,就得到第一行了左——>右的数值。

打印蛇形矩阵,矩阵,算法,c语言,c++

 文章来源地址https://www.toymoban.com/news/detail-739100.html

接下来从上——>下

这里我们需要打印的是第i行的最后每一个元素,第一行的最后一个元素已经被打印,这里的start就可以从1开始,然后让第i行的第end个元素依次依次存放。

打印蛇形矩阵,矩阵,算法,c语言,c++

 同理,count每次++之后的值放入数组里面

右——>左

这里可以就可以控制i为end-1的那个元素作为起点,然后i作为列依次递减,count依次递增,把count放进数组里面。

打印蛇形矩阵,矩阵,算法,c语言,c++

 

下——>上

最后我们可以把i作为行,i 赋值成end-1行,因为第一个元素已经被赋值,条件就是把i>=start+1的位置改成count这个数就可以了。

最后外围的一圈都被赋值之后这是就可以缩小矩形的范围

打印蛇形矩阵,矩阵,算法,c语言,c++

 

int main()
{
        int n = 0;
        scanf("%d", &n);
        int i = 0;
        int j = 0;
        int start = 0;
        int end = n - 1;
        int count = 0;
        int arr[4][4];
        while (count < n * n)
        { 
            //从左到右
            for (i = start; i <= end; i++)      //行为strat 列为i依次递增,把count的值放入数组
                arr[start][i] = ++count;      
            //从上到下
            for (i = start + 1; i <= end; i++)      //因为第一个最后一个位置已经被赋值 行从strat+1的位置开始,把每行的最后一个元素改成count++之后的值
                arr[i][end] = ++count;    
            //从右到左
            for (i = end-1; i >= start; i--)    //同样最后一个位置已经被赋值 就把i作为end-1的那个位置作为起点列,把end行的i列的每一个元素改为conut++
                arr[end][i] = ++count;
            //从下到上
            for (i = end-1; i >= start + 1; i--)//最后把i赋值成end-1作为行,每行的第第一元素改为count++;
                arr[i][start] = ++count;
            start++;    //当外围所有数字已经被赋值了一次之后就开始缩小范围
            end--;
        }
        for (i = 0; i < n; i++)
        {
            for (j = 0; j < n; j++)
            {
                printf("%d ", arr[i][j]);
            }
            printf("\n");
        }
       
	return 0;
}

二:蛇形矩形

 假如我们要打印一个4*4的这样的一个蛇形矩阵。

打印蛇形矩阵,矩阵,算法,c语言,c++

 首先我们来找规律,可以看出如果斜着数的话其实是一个2*n-1这么多躺,在看,如果是奇数躺的话数字是从下往上一次递增,如果是偶数的话就是从上往下一次递增的

打印蛇形矩阵,矩阵,算法,c语言,c++

 再看,如果是奇数趟那么x就是作为起点坐标, 如果是偶数趟那么x就是作为起点坐标。这样看的话,如果奇数趟每往上一个数,x作为行坐标就要-1,而y作为列坐标就会+1,反过来如果偶数趟y作为起点坐标,每往下一个数y就需要-1,而x就要+1。这里我们就可以定义一个变量来记录看它是偶数趟还是奇数,如果是奇数趟就让这个变量为-1,每次数值一个数后就让x+上这个-1,而y就去减-1,,然后用一个数来作为每次需要放进矩形的那个数。

如果让x,y这样自己走下去它会超出这个矩形坐标范围内,所以在给矩形放值得时候需要判断一下下x,y是否是有效坐标,如果不是我们就不需要管它。打印蛇形矩阵,矩阵,算法,c语言,c++

 

 

int main()
{
	int n = 0;
	scanf("%d", &n);
	int arr[20][20];
	int i = 0,j=0,count=0;
	int dir = 0; //判断是向上还是向下
	//x为行 y为列
	int x=0, y=0;
	for (i = 1; i <= 2 * n - 1; i++) //一共的趟数
	{
		if (i % 2 == 1)	//奇数躺是往上的,列是起点是不变的
		{
			x = i - 1;		//如果是奇数趟x就作为起点,对应后面得x+=dir得时候dir是正数还是负数
			y = 0;	
			dir = -1;	//记录偶数还是奇数趟
		}
		else
		{
			x = 0;
			y = i-1;	//偶数趟y就作为起点
			dir = 1;
		}
		while (x >= 0 && y >= 0)
		{
			if (x < n && y < n)
			{
				count++;
				arr[x][y] = count;
			}
			x += dir; 
			y -= dir;
		}
	}
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < n; j++)
		{
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}
	return 0;
}

到了这里,关于打印回型矩阵<——>蛇形矩阵(C语言)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【每日挠头算法题】Acwing 756. 蛇形矩阵 —— 巧妙解法

    👑作者主页:@进击的安度因 🏠学习社区:进击的安度因(个人社区) 📖专栏链接:每日挠头算法题 如果无聊的话,就来逛逛 我的博客栈 吧! 🌹 链接 :756. 蛇形矩阵 输入两个整数 n 和 m ,输出一个 n 行 m 列的矩阵,将数字 1 到 n × m 按照回字蛇形填充至矩阵中。 具体矩

    2024年02月02日
    浏览(46)
  • 蛇形矩阵蒸滴好玩

    先来看看题目: 描述 康托尔三角是由著名数学家康托尔设计的一个整数三角,可以用来证明所有有理数与自然数一一对应,亦即有理数集是一个可数集。康托尔三角的构造如下: 01 02 06 07 15 16 28 29 45 46 03 05 08 14 17 27 30 44 47 04 09 13 18 26 31 43 48 10 12 19 25 32 42 49 11 20 24 33 41 50 21

    2024年02月08日
    浏览(36)
  • 蛇形矩阵python

    作者简介 :一名后端开发人员,每天分享后端开发以及人工智能相关技术,行业前沿信息,面试宝典。 座右铭 :未来是不可确定的,慢慢来是最快的。 个人主页 :极客李华-CSDN博客 合作方式 :私聊+ 这个专栏内容 :BAT等大厂常见后端java开发面试题详细讲解,更新数目10

    2024年02月12日
    浏览(31)
  • 华为机试题:HJ35 蛇形矩阵(python)

    描述 : 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。 例如,当输入5时,应该输出的三角形为: 1 3 6 10 15 2 5 9 14 4 8 13 7 12 11 输入描述 : 输入正整数N(N不大于100) 输出描述 :输出一个N行的蛇形矩阵。 示例1 Python3 【Python】input()函数用法小结 常用的强转类

    2024年02月07日
    浏览(40)
  • 【算法】顺时针打印矩阵(图文详解,代码详细注释

    目录 题目 代码如下: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则打印出数字:1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10 这一道题乍一看,没有包含任何复杂的数据结构和高级算法,似乎蛮简单的。但

    2024年04月26日
    浏览(37)
  • 华为OD机试题,用 Java 解【蛇形矩阵】问题

    华为OD机试 - 猴子爬山 | 机试题算法思路 【2023】 华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】 华为OD机试 - 非严格递增连续数字序列 | 机试题算法思路 【2023】 华为OD机试 - 消消乐游戏(Java) | 机试题算法思路 【2023】 华为OD机试 - 组成最大数(Java) | 机试题算法思

    2023年04月09日
    浏览(37)
  • 剑指offer(C++)-JZ29:顺时针打印矩阵(算法-模拟)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 则依次打印出数字 数据范围: 0 = matrix.length = 100 0 = ma

    2024年02月10日
    浏览(43)
  • 数据结构第七周 :(稀疏矩阵快速转置 + 简单文本编辑器 + 三元组的矩阵加法 + 九宫格数独游戏 + 数组主元素 + 螺旋数字矩阵 + 蛇形矩阵)

    【问题描述】 稀疏矩阵的存储不宜用二维数组存储每个元素,那样的话会浪费很多的存储空间。所以可以使用一个一维数组存储其中的非零元素。这个一维数组的元素类型是一个三元组,由非零元素在该稀疏矩阵中的位置(行号和列号对)以及该元组的值构成。而矩阵转置就

    2023年04月21日
    浏览(43)
  • C语言求任意两个矩阵相乘的算法(初学尝试矩阵乘法)

    C语言求任意两个矩阵相乘的算法(不同于大部分规格固定的矩阵乘法) 结果图如下   :                           代码如下: //----- 任意两个矩阵相乘 # include stdio.h int main (void) {     char ch;     int a, b, c, d;     printf (\\\"此算法用于任意两个矩阵相乘  n矩阵1(a行b列)

    2023年04月08日
    浏览(60)
  • 稀疏矩阵转置算法(C语言)

    (参考数据结构教材,严蔚敏,吴伟民版 p99,多谢阅读,望对您有帮助) 无论是几维的数组,在计算机中都是 以一维数组 的方式进行存储的。 矩阵:相当于 二维数组 ,它的存储,依然是用一维数组的方式进行存储。 nxn的矩阵,在计算机空间上, 需要nxn个空间 。 稀疏矩

    2024年02月01日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包