-
2020-06-09 01:35:20
写在前面:这里是小王成长日志,一名在校大学生,想在学习之余将自己的学习笔记分享出来,记录自己的成长轨迹,帮助可能需要的人。欢迎关注与留言。
题目:
题目链接:https://www.dotcpp.com/oj/problem1097.html
题目 1097: 蛇行矩阵
时间限制: 1Sec 内存限制: 64MB 提交: 6903 解决: 4643
题目描述
蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。
输入
本题有多组数据,每组数据由一个正整数N组成。(N不大于100)
输出
对于每一组数据,输出一个N行的蛇形矩阵。两组输出之间不要额外的空行。矩阵三角中同一行的数字用一个空格分开。行尾不要多余的空格。
样例输入
5样例输出
1 3 6 10 15
2 5 9 14
4 8 13
7 12
11C语言解法
这道题主要就是去找蛇形矩阵的规律,可以发现每一行的元素是其前一个元素加上行数(0开始)加上列数(0开始)再加上1
而每一行第一个元素是上一行第一个元素加上当前行数(0开始)
注意在这道题里我是生成了一个100阶的蛇形矩阵,然后再根据N输出这个100阶矩阵的部分,但是并不需要,可以直接生成N阶即可,我这么做是因为一开始看错了题,以为有多个测试数据,稍微改改就可以了,很简单的#include <stdio.h> int main() { int n; int mt[100][100]; mt[0][0] = 1; for (int i = 0; i < 100; i++) { for (int j = 0; j < 100 - i; j++) { if (j == 0 && i > 0) mt[i][j] = mt[i - 1][j] + i; //赋值首元素 else if (j != 0 || i != 0)//避免mt[0][0]遭覆盖 mt[i][j] = mt[i][j - 1] + i + j + 1; } } scanf("%d", &n); //打印 for (int i = 0; i < n; i++) { for (int j = 0; j < n - i; j++) { printf("%d", mt[i][j]); if (j != n - i - 1) printf(" "); } printf("\n"); } }
都看到这里了,各位哥哥姐姐叔叔阿姨给小王点个赞 关个注 留个言吧,和小王一起成长吧,你们的关注是对我最大的支持。
有事没事进来看看吧 : 小王的博客目录索引
C语言专栏看这 : C语言学习专栏
如果以上内容有任何不准确或遗漏之处,或者你有更好的意见,就在下面留个言让我知道吧-我会尽我所能来回答。
更多相关内容 -
c语言实现蛇形矩阵(详解含代码)
2022-01-06 21:28:57c语言实现蛇形矩阵(详解含代码)大家好,我是诚挚的乔治
前言:
本次蛇形矩阵我将以两种方法来实现,即非递归和递归
非递归的实现:
#define right 1 #define down 2 #define left 3 #define up 4 #define n 5 //控制矩形的大小 #include<stdio.h> int main()//设计一个蛇形矩形图案 顺时针 { int m = 1; int x = 1; int y = 1; int direct; int i = 0; int j = 0; int arr[n + 1][n + 1]; for (x = 1; x < (n + 1); x++) { for (y = 1; y < (n + 1); y++) { arr[x][y] = 100;//随机但是不能定为零 } } x = 1; y = 1; direct = right; while (m <= n * n) { arr[x][y] = m++; switch (direct) { case right: if (arr[x][y + 1] == 100) { y++; } else { direct = down; x++; }break; case down: if (arr[x + 1][y] == 100) { x++; } else { direct = left; y--; }break; case left: if (arr[x][y - 1] == 100) { y--; } else { direct = up; x--; }break; case up: if (arr[x - 1][y] == 100) { x--; } else { direct = right; y++; }break; } } //显示矩形 for (x = 1; x <= n; x++) { for (y = 1; y <= n; y++) { printf("%2d ", arr[x][y]); } printf("\n"); } return 0; }
非递归的解题思想:定义一个数组,这个数组的大小是(N+1)*(N+1),目的是形成一个边框,便于调整方向,其次就是当x与y跑到边框的位置就实现拐弯。
拐弯的思想就是上到下,下到左,左到上,上再到右,实现从外围向内包围,直至m <= n * n。
递归的实现:
#define right 1 #define down 2 #define left 3 #define up 4 #define n 7 //控制大小 int arr[n][n]; #include<stdio.h> void snake(int x, int y, int m, int direct) { arr[x][y]=m; if (m == n * n) return; switch (direct) { case right: if ((y+1) == (n+1) || arr[x][y+1] > 0) {//到达右边边界或者右边有数字,不能再往右 direct = down; //改变方向,向下 x++; //向下移动一格 } else //可以向右填写 y++; //向右移动一格 break; case down: if ((x + 1) == (n+1) || arr[x + 1][y] > 0) { direct = left; y--; } else x++; break; case left: if ((y + 1) == (n+1) || arr[x][y - 1] > 0) { direct = up; x--; } else y--; break; case up: if ((y + 1) == (n+1) || arr[x-1][y] > 0) { direct = right; y++; } else x--; break; } snake(x, y, ++m, direct); //填写下一个数 } int main()//用递归填写这个矩形蛇形图案 { int x = 1; int y = 1; int m = 1; snake(x, y, m, right); //显示矩形 for (x = 1; x <= n; x++) { for (y = 1; y <= n; y++) { printf("%2d ", arr[x][y]);//这里有个二,别忘了 } printf("\n"); } return 0; }
递归的实现大体思路跟非递归的实现类似,从外面到内部
但递归的每一个元素是单独在一个函数里来定义的,直至最后的m==n*n,然后再main函数里实现最终的模型。
其中的n是来控制大小,例如当n为5和9的结果如下:
欢迎点赞收藏加关注,如若有问题可以题出来😁😁😁😁
-
c语言实现蛇形矩阵和回形矩阵
2020-02-27 12:42:34蛇形矩阵 #include<stdio.h> /*输出蛇形矩阵*/ int main() { int n; int num[1000][1000]; int i=0,j=0; int count = 0; scanf("%d",&n); num[i][j]=++count;//为num[0][0]赋值1 while(co...蛇形矩阵
#include<stdio.h> /*输出蛇形矩阵*/ int main() { int n; int num[100][100]; int i=0,j=0; int count = 0; scanf("%d",&n); num[i][j]=++count;//为num[0][0]赋值1 while(count<n*n) { if(j<n-1)//if-else语句判断是横着走一个还是竖着走一个,并赋值 j++; else i++; num[i][j]=++count; while(i<n-1&&j>0)//斜向下走,直到走到头 { i++;j--; num[i][j]=++count; } if(i<n-1)//if-else语句判断是横着走还是竖着走,并赋值 i++; else j++; num[i][j]=++count; while(i>0&&j<n-1)//斜向上走,走到头 { i--;j++; num[i][j]=++count; } } for(i=0;i<n;i++)//输出 { for(j=0;j<n;j++) printf("%d ",num[i][j]); putchar('\n'); } return 0; }
回形矩阵
#include<stdio.h> /*输出回形矩阵*/ int main() { int n,count=0,i; scanf("%d",&n); int num[100][100]; int start=0,finish=n-1; while(count<n*n) { for(i=start;i<=finish;i++)//从左向右 num[start][i]=++count; for(i=start+1;i<=finish;i++)//从上到下 num[i][finish]=++count; for(i=finish-1;i>=start;i--)//从右往左 num[finish][i]=++count; for(i=finish-1;i>=start+1;i--)//从下向上 num[i][start]=++count; start++;finish--;//缩圈 } for(i=0;i<n;i++)//输出 { for(int j=0;j<n;j++) printf("%d ",num[i][j]); putchar('\n'); } return 0; }
开始的时候遇到了问题:Process returned -1073741571 (0xC00000FD)
发现原因是num[1000][1000]定义的太大了内存溢出,改小一点就好啦 -
用C语言实现蛇形矩阵的打印
2022-04-30 14:35:31原理是根据蛇形矩阵的性质,运用矩阵行列对下个数字打印的方向进行判别,从而打印出对应的数字。详情请看如下参考代码。 参考代码: #include<stdio.h> int n; int i = 0; //行 int j = 0; //列 int k = ...输入任意阶数,即可打对应印蛇形矩阵。原理是根据蛇形矩阵的性质,运用矩阵行列对下个数字打印的方向进行判别,从而打印出对应的数字。详情请看如下参考代码。
参考代码:
#include<stdio.h> int n; int i = 0; //行 int j = 0; //列 int k = 1; //运动方向. k =1 →; k=2 ↙; k=3 ↓ ;k=4 ↗ int data[100][100]; int main() { printf("输入矩阵阶数:\n"); scanf_s("%d", &n); //------------------判断方向 while (i != n - 1 || j != n - 1) { if (k == 1) { data[i][j + 1] = data[i][j] + 1; j++; if (i == n - 1) { k = 4; } else { k = 2; } } else if (k == 2) { data[i + 1][j - 1] = data[i][j] + 1; j--; i++; if (j == 0 && i != n - 1) { k = 3; } else if (i == n - 1) { k = 1; } else { k = 2; } } else if (k == 3) { data[i + 1][j] = data[i][j] + 1; i++; if (j == n - 1) { k = 2; } else { k = 4; } } //-------------------------生成矩阵元素 else if (k == 4) { data[i - 1][j + 1] = data[i][j] + 1; j++; i--; if (i == 0 && j != n - 1) { k = 1; } else if (j == n - 1) { k = 3; } else { k = 4; } } } //显示矩阵 for (int a = 0; a < n; a++) { for (int b = 0; b < n; b++) { printf("%d\t", data[a][b]); } printf("\n"); printf("\n"); } }
运行结果:
-
递归法解决回式蛇形矩阵的输出(C语言的实现)
2021-05-22 02:55:52一、今天说的是哪种蛇形矩阵蛇形矩阵有多种,今天说的是下面这种回形的蛇形矩阵。如4x4的回形蛇形矩阵 如5x5的回形蛇形矩阵 通过分析发现,这种矩阵,在走一圈以后又变成一个小2个的矩阵,如5x5的矩阵,从1、2、3。... -
【C语言习题】输出蛇形矩阵
2019-12-19 16:01:08题目 分析 从1开始,a[n][0]=1 往右下移动 若移动到最后一行非最后一列,右一格;最后一列则上一格 左上移动 若移动到第一列非第一行,上一格;第一行则右一格 2~5步循环 ... int a[SIZE][SIZE]={... -
C语言实现蛇形矩阵/蛇形数组并输出(C语言学习记录--陌生兔)
2019-11-30 09:20:56MAX),输出1到n蛇形矩阵。 【例如】 n=10 1 2 6 7 3 5 8 4 9 10 思路 昨天晚上无意看到这题,打算尝试一下。这种题无非就是找规律,和数学题差不多。当时没有工具,勉强在手机上的表格上写了蛇形数组,观察了下思路... -
【C语言】回形蛇形矩阵
2018-12-15 18:45:13#include <malloc.h> #include <stdio.h> int main(void) { //用户输入的值,创建n*n的矩阵 int n; //蛇形从1开始计数 int count = 1; /... -
打印数字三角及蛇形矩阵(C语言)
2021-04-09 10:45:21} 运行结果: 蛇形矩阵: 输入样例:5 输出: 通过图片分析,我们可以知道,每一行都是向着斜向上的方向移动,所以这时候我们可以通过循环即可实现向斜向上的方向移动,只需要改变对应的下标即可。 对应的代码: #include... -
leetcode 剑指 Offer 29. 顺时针打印矩阵 经典的蛇形矩阵问题
2020-08-10 13:30:02顺时针打印矩阵 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 示例 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],... -
使用循环打印蛇形逆时针矩阵(C语言)
2020-04-03 09:37:11蛇形矩阵其实就是逆时针旋转矩阵,不过数字是从n*n开始存入,位置是在(n-1,n-1)开始设置。此时思路过程不再多说。直接献上代码君。 狮小范喜欢玩一个数字游戏,取一个n行n列数字矩阵 (其中n为不超过100的奇数)... -
C/C++编程笔记:C++ 嵌套循环,含循环打印及蛇形矩阵实例
2021-05-20 09:30:21循环图案打印分别打印下面三种图案: 思路分析一般来说,单循环打印的图案都是线性的,要么是横线要么是竖线。那么我们这里需要打印一个二维图形,就需要从线跨越到面。那么我们只要有很多条线就能构成一个平面,... -
C/C++实现蛇形矩阵(超详解)【沈七】
2022-01-05 12:14:03C/C++实现蛇形矩阵(超详解) -
蛇形矩阵 - 作业部落 Cmd Markdown 编辑阅读器
2021-05-22 11:52:45蛇形矩阵C-study-codeErin最近学习了数组,她想通过数组实现一个蛇形方阵的打印,你可以帮她实现这个程序吗?input:整数n(2output:n*n的方阵,从方阵右上角开始以顺时针方向进行数数如下所示input:3output:7 8 16 ... -
C语言蛇形矩阵之崴脚的小北
2020-11-28 12:13:13题目(蛇形矩阵之崴脚的小北) Description 曾经有一个蛇的种族,他们喜欢在一个方框里绕来绕去。大家都相处的很和睦。 知道有一天,有一天叫小北的蛇把脚崴了(不要问我为啥蛇能把脚歪了),于是他的走法发生了亿点点... -
略长但无脑的蛇形矩阵打印方法
2021-10-27 16:11:57话不多说,直接贴代码 #include <stdio.h> #define N 100 //简单的一次函数关系,设置碰壁点 int main() { int a[N][N]={0}; int n,check; printf("Input n:\n"); check = scanf("%d",&... int i,j,cou -
蛇形矩阵
2017-11-15 16:41:51蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形 Input 一个正整数N(N Output 输出一个N行的蛇形矩阵 Sample Input 5 Sample Output 1 3 6 10 15 2 5 9 14 4 8 13 7 12 11 #... -
c语言实现输出二维蛇形矩阵
2016-11-30 23:36:09c语言实现输出二维蛇形矩阵 -
C语言:环形(蛇形)矩阵
2018-06-17 15:39:44输入n和m(都不超过20)输入n*m矩阵sample input:4 3sample output: 1 2 3 4 10 11 12 5 9 8 7 6#include<stdio.h>int main(){ int a[20][20]={-1}; int t,x,y; int n,m; t=a[x=0][y=0]=1; sca... -
蛇形矩阵c/c++
2022-04-13 00:09:59给定一个整数n,输出n*n的蛇形矩阵 输入描述: 输入一行,包含一个整数n 输出描述: 输出n行,每行包含n个正整数,通过空格分隔 1<=n<=1000; 输入:4 输出: 1 2 6 7 3 5 8 13 4 9 12... -
n*n蛇形矩阵
2021-01-18 10:39:09蛇形矩阵是一个nn的矩阵,将整数1到nn按照蛇形的顺序装入一个 n*n 的蛇形矩阵中,如样例所示分别为5阶和10阶蛇形矩阵: 输入与输出要求: 输入一个整数n,代表蛇形矩阵的阶数,n的范围是1—100。输出蛇形矩阵。每行... -
C语言课程设计矩阵的构造与打印.doc
2021-05-24 02:50:10C语言课程设计矩阵的构造与打印《 C 语 言 》课程设计报告标题:矩阵的构造与打印学号:姓名:同组人员:年级专业:09电子信息工程指导老师:完成日期:2010/6/24目录一、选题思想二、课题要求三、课题分析与设计四... -
面试题-蛇形矩阵详解
2020-10-28 00:47:42输入两个整数n和m,输出一个n行m列的矩阵,将数字 1 到 n*m 按照回字蛇形填充至矩阵中。 具体矩阵形式可参考样例。 输入格式 输入共一行,包含两个整数n和m。 输出格式 输出满足要求的矩阵。 矩阵占n行,每行包含m个... -
蛇形矩阵输出是要怎么写代码,感觉没有眉目啊,大佬能说一下思想吗
2021-05-21 11:29:31该楼层疑似违规已被系统折叠隐藏此楼查看此楼#include #include#include#includeusing namespace std;void rowfill(int& startnum, int& startrow,int& startcol, int length,int step,int direct,...