首页 > 其他分享 >基础二维数组应用——蛇形矩阵

基础二维数组应用——蛇形矩阵

时间:2024-12-17 21:31:39浏览次数:5  
标签:10 int 样例 矩阵 ++ 二维 蛇形

蛇形矩阵是一个n*n的矩阵,将整数1到n*n按照蛇形的顺序装入一个 n*n 的蛇形矩阵中,如样例所示分别为5阶和10阶蛇形矩阵。

输入格式:

只有一行,为一个整数n,代表蛇形矩阵的阶数,n的范围是1—100。

输出格式:

共n行,为蛇形矩阵。每行的每个元素用空格分隔,注意最后一个数的后面为换行符。

输入样例一:

5

输出样例一:

1 3 4 10 11
2 5 9 12 19
6 8 13 18 20
7 14 17 21 24
15 16 22 23 25

输入样例二:

10

输出样例二:

1 3 4 10 11 21 22 36 37 55
2 5 9 12 20 23 35 38 54 56
6 8 13 19 24 34 39 53 57 72
7 14 18 25 33 40 52 58 71 73
15 17 26 32 41 51 59 70 74 85
16 27 31 42 50 60 69 75 84 86
28 30 43 49 61 68 76 83 87 94
29 44 48 62 67 77 82 88 93 95
45 47 63 66 78 81 89 92 96 99
46 64 65 79 80 90 91 97 98 100

我们一开始肯定会先想去找矩阵变化规律,(1,1)-(2,1)-(1,2)...,这样排列下去发现有许多的转弯点,很难转换成一个模型,但算法的却是基于我们抽象出来的数学模型实现的,所以我们的第一步便是将问题进行转化。

 通过观察,可以发现如果我们先忽略转弯点的话,那么此时的矩阵就是每一个斜线对应着一个连续的数字,拿5*5的举例

1341011
2591219
68131820
714172124
1516222325

即(1),(2,3),(4,5,6),(7,8,9,10)...,同时这个序列的上下是有区别的,并且与奇偶相关,此时问题就明了了,先将矩阵分为左上部分和右下部分,再分奇偶来填充每一个序列就OK了,大家可以打一下,还是可以锻炼一点点码力的应该。AC代码如下。

#include <stdio.h>

int main(){
	int n;
	scanf("%d",&n);
	int t = 1;
	int map[n+1][n+1];  //c99以后的编译器才支持,不推荐这样写,这里为了方便这样用了
	map[1][1] = 1;
	for(int i = 1; i<=n; i++){   //先处理左上部分 
		if(i&1){
			for(int j = 1, tmp = i; j<=n&&tmp>=1; j++,tmp--){
				map[j][tmp] = t++;
			}
		}
		else{
			for(int j = 1, tmp1 = i; j<=n&&tmp1>=1; j++,tmp1--){
				map[tmp1][j] = t++;
			}
		}
	}
	//通过对称性来反推右下部分
	for(int i = n; i>=1; i--)
		for(int j = n-i+2; j<=n; j++){
			map[i][j] = n * n + 1 - map[n+1-i][n+1-j];
		} 
	for(int i = 1; i<=n; i++)
		for(int j = 1; j<=n; j++){
			if(j == n) printf("%d\n",map[i][j]);
			else printf("%d ",map[i][j]);
		} 
	return 0;
} 

因为还是新手,这段代码有些地方书写可能不够规范,多多包涵。

标签:10,int,样例,矩阵,++,二维,蛇形
From: https://blog.csdn.net/2403_86498269/article/details/144486340

相关文章

  • 54. 螺旋矩阵
    螺旋矩阵给你一个m行n列的矩阵matrix,请按照顺时针螺旋顺序,返回矩阵中的所有元素。示例1:输入:matrix=[[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例2:输入:matrix=[[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]思路边界......
  • 73. 矩阵置零
    矩阵置零给定一个mxn的矩阵,如果一个元素为0,则将其所在行和列的所有元素都设为0。请使用原地算法。实例一:输入:matrix=[[1,1,1],[1,0,1],[1,1,1]]输出:[[1,0,1],[0,0,0],[1,0,1]]实例二:输入:matrix=[[0,1,2,0],[3,4,5,2],[1,3,1,5]]输出:[[0,0,0,0],[0,4,5,......
  • 抖音SEO矩阵源码搭建:一键霸屏秘诀揭秘
    抖音SEO系统,也称为抖音SEO矩阵或抖音搜索优化排名系统,是一个集成了多种功能的平台。它的核心功能包括AI视频混剪、视频产出、AI视频制作、多账号多平台管理、内部分发以及站内搜索排名优化等。该系统还提供了会员爆客和企业号管理等功能。虽然每个功能都经过深度开发,但抖音作为......
  • # 【鸿蒙开发】如何生成二维码截图保存到相册##实现分享功能
    【鸿蒙开发】如何生成二维码截图保存到相册##实现分享功能文章目录【鸿蒙开发】如何生成二维码截图保存到相册##实现分享功能前言一、业务流程梳理二、效果展示三、实现代码1.静态布局2.实现截图保存相册功能3.调用保存方法四、实现扫码功能1.效果展示2.实现代码......
  • 海外版TikTok矩阵出海获客,从下载搭建到运营教学
    海外版TikTok矩阵运营,如何快速搭建?在如今数字化时代,企业和个人品牌都非常重视海外市场的拓展。而作为全球热门的短视频平台,TikTok自然成为了兵家必争之地。然而,由于TikTok在海外有多个版本,例如:TikTok、DY、KS、XHS等,每个平台的运营策略和规则都不尽相同。因此,想要高效管理这......
  • 网站底部二维码怎么修改,如何轻松更新网站底部二维码
    如果您需要修改网站底部的二维码,可以按照以下步骤进行操作:登录后台管理:使用您的账户信息登录网站的后台管理系统。导航至底部设置:登录后,导航至“模板管理”或“页面管理”等相关页面。这些页面通常会包含底部内容的编辑功能。选择模板文件:在模板管理页面中,找到当前使用的......
  • 二维三维空间上两点之间的距离
            二维三维路径上,路径总距离以及途径点与障碍物之间的距离等都需要计算两点之间的距离。两点之间的距离有多种计算方法,这些计算方法主要取决于所考虑的空间维度、点的属性以及具体的应用场景。以下是一些常见的距离计算方法:1.曼哈顿距离(Manhattandistance) ......
  • JAVA学习-练习试用Java实现“使用嵌套循环打印出一个5x5的星号矩阵”
    问题:创建一个Java程序,使用嵌套循环打印出一个5x5的星号矩阵。解答思路:以下是一个Java程序,它使用嵌套循环打印出一个5x5的星号矩阵:publicclassStarMatrix{publicstaticvoidmain(String[]args){intsize=5;//矩阵大小for(inti=0......
  • 7-4 sdut- C语言实验-矩阵转置
    7-4sdut-C语言实验-矩阵转置分数9全屏浏览切换布局作者 马新娟单位 山东理工大学输入N*N的矩阵,输出它的转置矩阵。输入格式:第一行为整数N(1≤N≤100)。接着是一个N*N的矩阵。输出格式:转置矩阵。输入样例:21212输出样例:1122#include<stdio.h>i......
  • 【矩阵的约化】用matlab实现基于Givens变换与Householder变换的QR分解
    善用目录,可以根据需求直接跳转至代码部分~欢迎讨论,如有错误麻烦指正(*^▽^*)本篇不进行详细解释,深入学习可以参考教材            在理解算式之前,先明确目标:得到一个上三角矩阵方便线性方程组的计算,由此衍生出QR分解。一、Givens变换        ......