精华内容
下载资源
问答
  • C语言输出蛇形矩阵
    千次阅读 多人点赞
    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
    11

    C语言解法

    这道题主要就是去找蛇形矩阵的规律,可以发现每一行的元素是其前一个元素加上行数(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:57
    c语言实现蛇形矩阵(详解含代码)

                                                                         大家好,我是诚挚的乔治

     前言:

    本次蛇形矩阵我将以两种方法来实现,即非递归和递归

    非递归的实现:

    #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");
    	}
    }

    运行结果:

     

     

    展开全文
  • 一、今天说的是哪种蛇形矩阵蛇形矩阵有多种,今天说的是下面这种回形的蛇形矩阵。如4x4的回形蛇形矩阵 如5x5的回形蛇形矩阵 通过分析发现,这种矩阵,在走一圈以后又变成一个小2个的矩阵,如5x5的矩阵,从1、2、3。...
  • 题目 分析 从1开始,a[n][0]=1 往右下移动 若移动到最后一行非最后一列,右一格;最后一列则上一格 左上移动 若移动到第一列非第一行,上一格;第一行则右一格 2~5步循环 ... int a[SIZE][SIZE]={...
  • MAX),输出1到n蛇形矩阵。 【例如】 n=10 1 2 6 7 3 5 8 4 9 10 思路 昨天晚上无意看到这题,打算尝试一下。这种题无非就是找规律,和数学题差不多。当时没有工具,勉强在手机上的表格上写了蛇形数组,观察了下思路...
  • C语言】回形蛇形矩阵

    千次阅读 2018-12-15 18:45:13
    #include &lt;malloc.h&gt; #include &lt;stdio.h&gt; int main(void) { //用户输入的值,创建n*n的矩阵 int n; //蛇形从1开始计数 int count = 1; /...
  • } 运行结果: 蛇形矩阵: 输入样例:5 输出: 通过图片分析,我们可以知道,每一行都是向着斜向上的方向移动,所以这时候我们可以通过循环即可实现向斜向上的方向移动,只需要改变对应的下标即可。 对应的代码: #include...
  • 顺时针打印矩阵 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 示例 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],...
  • 蛇形矩阵其实就是逆时针旋转矩阵,不过数字是从n*n开始存入,位置是在(n-1,n-1)开始设置。此时思路过程不再多说。直接献上代码君。 狮小范喜欢玩一个数字游戏,取一个n行n列数字矩阵 (其中n为不超过100的奇数)...
  • 循环图案打印分别打印下面三种图案: 思路分析一般来说,单循环打印的图案都是线性的,要么是横线要么是竖线。那么我们这里需要打印一个二维图形,就需要从线跨越到面。那么我们只要有很多条线就能构成一个平面,...
  • C/C++实现蛇形矩阵(超详解)【沈七】

    千次阅读 多人点赞 2022-01-05 12:14:03
    C/C++实现蛇形矩阵(超详解)
  • 蛇形矩阵C-study-codeErin最近学习了数组,她想通过数组实现一个蛇形方阵的打印,你可以帮她实现这个程序吗?input:整数n(2output:n*n的方阵,从方阵右上角开始以顺时针方向进行数数如下所示input:3output:7 8 16 ...
  • 题目(蛇形矩阵之崴脚的小北) Description 曾经有一个蛇的种族,他们喜欢在一个方框里绕来绕去。大家都相处的很和睦。 知道有一天,有一天叫小北的蛇把脚崴了(不要问我为啥蛇能把脚歪了),于是他的走法发生了亿点点...
  • 话不多说,直接贴代码 #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:09
    c语言实现输出二维蛇形矩阵
  • 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&lt;stdio.h&gt;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语言课程设计矩阵的构造与打印《 C 语 言 》课程设计报告标题:矩阵的构造与打印学号:姓名:同组人员:年级专业:09电子信息工程指导老师:完成日期:2010/6/24目录一、选题思想二、课题要求三、课题分析与设计四...
  • 面试题-蛇形矩阵详解

    2020-10-28 00:47:42
    输入两个整数n和m,输出一个n行m列的矩阵,将数字 1 到 n*m 按照回字蛇形填充至矩阵中。 具体矩阵形式可参考样例。 输入格式 输入共一行,包含两个整数n和m。 输出格式 输出满足要求的矩阵矩阵占n行,每行包含m个...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼#include #include#include#includeusing namespace std;void rowfill(int& startnum, int& startrow,int& startcol, int length,int step,int direct,...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 201
精华内容 80
关键字:

c语言打印蛇形矩阵