精华内容
下载资源
问答
  • 蛇形数字三角形
    2022-05-01 14:46:01

    问题描述

    输入一个正整数N,输出N行的蛇形数字三角形

    输入描述

    一行,一个正整数N,N大于等于3并且小于等于30

    输出描述

    N行,第1行N个数,第2行N-1个数,……,第N行一个数。每个数占5列。

    样例输入

    5
                        

    样例输出

        1    2    4    7   11
        3    5    8   12
        6    9   13
       10   14
       15

    代码如下:

    #include <stdio.h>

    int main()

    {

            int a[100][100];

            int n,m=1;

            int i,j,k;

            int r,t;

            scanf("%d",&n);

            t=n;

            k=0;

            for(i=0;i<n;i++) {

                     r=0;

                     for (j=k,k++;j>=0;j--) {

                             a[r][j]=m;

                             r++;

                             m++;

                     }

            }

            for (i=0;i<n;i++) {

                     for (j=0;j<n;j++) {

                             printf("%5d",a[i][j]);

                             if(j==t-1) {

                                      printf("\n");

                                      t--;

                                      break;

                             }

                     }

            }

            return 0;

    }

    更多相关内容
  • 信息奥赛课课通P174-1,蛇形数字三角形的C++程序代码。
  • 蛇形数字三角形(C语言实现)

    千次阅读 2018-12-06 10:02:04
    蛇形数字三角形(C语言实现) 代码如下: #include &amp;lt;stdio.h&amp;gt; #include &amp;lt;stdlib.h&amp;gt; int cnt = 0; int a[26][50]; int n; void f(int top, int bottom) { ...

    蛇形数字三角形(C语言实现)

    在这里插入图片描述

    代码如下:

    #include <stdio.h>
    #include <stdbool.h>
    int cnt = 0;
    int a[26][50];
    int n;
    
    void f(int top, int bottom)
    {
    	int i, j;
    	if(top<(n+1)/4)
    		return;
    	for(j=n-bottom+1; j<bottom; ++j)
    		a[top][j] = ++cnt;
    	for(i=top; i>(1+n)/2-top+1; --i, --j)
    		a[i][j] = ++cnt;
    	if(j==(n+1)/2)
    	{
    		bool go = true;
    		while(i<top)
    		{
    			a[i][j] = ++cnt;
    			++i;
    			--j;
    			go = false;
    		}
    		if(go)
    			a[i][j] = ++cnt;
    		go = true;
    	}
    	f(top-1, bottom-2);
    	return;
    }
    
    int main(void)
    {	
    	int top, bottom, i, j;
    	for(i=0; i<26; ++i)
    		for(j=0; j<50; ++j)
    			a[i][j] = 0;
    	scanf("%d", &n);
    	bottom = n;
    	top = (1 + bottom) / 2;
    	f(top, bottom);
    	for(i=1; i<=(n+1)/2; ++i)
    	{
    		for(j=1; j<=n; ++j)
    		{
    			if(a[i][j]==0)
    				printf("    ");
    			else
    				printf("%4d", a[i][j]);
    		}
    		putchar('\n');
    	}
    	return 0;
    }
    
    
    
    展开全文
  • (C语言)数字三角形(蛇形)

    千次阅读 2018-12-08 00:39:07
    #include&lt;stdio.h&... //三角形中的每个值由它来确定 int N; //列数 int n; //行数 int j1,j2; //j1表示行,j2表示列 int w; int e; int q=0; int a[25][49]; for(int i=0;i&l...

    在这里插入图片描述

    #include<stdio.h>
    int main(void)
    {
    	int num=0;   //三角形中的每个值由它来确定 
    	int N;       //列数 
    	int n;       //行数 
    	int j1,j2;   //j1表示行,j2表示列 
    	int w;
    	int e;
    	int q=0;
    	int a[25][49];
    	for(int i=0;i<25;i++)             //先把数组内每一个值都变成0
    		for(int j=0;j<49;j++)
    			a[i][j]=0;
    	scanf("%d",&N);                      //获取列数
    	n=(N+1)/2;                           //获取行数
    	
    	for(j2=0,j1=n-1;j2<N;j2++)     
    		a[j1][j2]=++num;            //先把最底层那一行的数组值确定
    	n--;                             //最底层确定后,三角形的总行数减一
    	j2--;                            
    	while(n!=0)
    	{
    		for(j1--,j2--,w=j2;j2>=w-n+1;j1--,j2--)
    			a[j1][j2]=++num;                    //确定三角形的右斜边
    		q++;                   //右斜边确定后,最顶层也就确定了
    		n--;                    //因为最顶层只有一个值,总行数再次减一
    		if(0==n)         
    			break;   //如果此时总行数为0,则无需继续完善三角形,直接跳出循环
    		for(j1+=2,w=j2;j2>=w-n+1;j1++,j2--)
    			a[j1][j2]=++num;      //确定三角形的左斜边
    		for(j1--,j2+=2,w=j1,e=j2;j2<e+2*w-e+1;j2++)
    			a[j1][j2]=++num;          //确定三角形的底边
    		n--;                                    //底边确定后,则总行数减一
    		j2--;
    		if(0==n)       //如果此时总行数为0,则无需继续完善三角形,直接跳出循环
    			break;     
    	}
    	
    	for(int i=0;i<25;i++)
    	{
    		for(int j=0;j<49;j++)
    		{
    			if(0==a[i][j])    //若数组为0,则不是三角形的组成值,就输出空白
    				printf("     ");
    			else 
    				printf("%5d",a[i][j]);
    		}
    		printf("\n");
    	}
    	return 0;
    }
    

    N=19时,结果为:

    在这里插入图片描述

    展开全文
  • 数字三角形问题

    2012-02-21 16:18:21
    纯C++编写,并且提供input()输入,output()输出,保证运行成功!
  • 用C++语言,写“蛇形数组”程序(数字倒三角),将程序数据写入到TXT文件夹里面,本程序是重庆大学举办类似ACM竞赛的第一题
  • 打印数字三角及蛇形矩阵(C语言)

    千次阅读 2021-04-09 10:45:21
    输出如题所示的数字三角形,为了输出美观,每个数字栈5个字符位,右对齐(即%5d) 解题的思路: 1、定义一个45行45列的二维数组arr[N][N],用于存放对应的值 2、定义两个数组,表示它在x方向、y方向上的移动方向,并...

    题目描述:
    从键盘输入N,输出如下图所示的N行的数字三角.
    例如: N = 5,那么输出如下:
    在这里插入图片描述
    输入格式:
    输入一个整数N,1<= N <= 45
    输出格式:
    输出如题所示的数字三角形,为了输出美观,每个数字栈5个字符位,右对齐(即%5d)

    解题的思路:
    1、定义一个45行45列的二维数组arr[N][N],用于存放对应的值
    2、定义两个数组,表示它在x方向、y方向上的移动方向,并分别对这两个数组进行初始化。move_x[3] = {1,0,-1},move_y[3] = {0,1,-1},之所以这样初始化,是因为由上面图示可以直到,移动只有3个方向,向下,向右,斜上,所以如果move_x的值为0,表示向右移动,为1表示向下移动,-1表示斜上;move_y的值为0表示向下,值为1表示向右,-1表示斜上
    3、定义x,y表示当前的位置,a、b表示当前位置的下一格,用于判断是否需要改变方向,d表示当前方向的下标,如果d = 0,那么move_x[0] = 1,move_y[0] = 0,说明是向下移动的,其他的同理。
    改变方向的条件:如果arr[a]\[b]的值不为0,表示这一步已经走过了,那么就改变方向,如果a、b的值导致数组发生了越界,那么同样需要改变方向。这时候只要修正d的值,然后将a = x + move_x[d],b = y + move_y[d]操作即可实现方向改变

    代码实现:

    #include<stdio.h>
    #define N 45
    int main(){
      int i,j,n;//n表示数组是多少行
      int arr[N][N]={0};//将数组初始化为0,表示没有走过
      int move_x[3] = {1,0,-1},move_y[3] = {0,1,-1};//定义两个数组,表示移动的方向
      int x = 0,y = 0,a = 0,b = 0,d = 0,count = 1;//count统计各个下标下的值,定义x,y有必要的
      scanf("%d",&n);
      for(i = 0; i < n; i++){
        for(j = 0; j <= i; j++){
            //printf("d = %d, a = %d ,b = %d,x = %d ,y = %d ,count = %d\n",d,a,b,x,y,count);--可以检验移动的值是否正确
            /*
            有同学问这样是否可以呢?答案是否定的,为什么?
            这时候我们举一个例子就知道了,如果我们输入的n为5,那么这时候如果
            当前已经走到了arr[4][0]这个位置,执行arr[4][0] = 5之后,这时候
            及进行a = a + move_x[d] = 5,b = b + move_y[d] = 0,明显的是
            a >= n了,此时就进入到了if语句进行修改移动的方向,这时候d = 1,
            重点就是这里,这时候a = a + move_x[d] = 5 + 0 = 5,b = b +      
            move_y[d] = 0 + 1 = 1,发现同样是发生了越界,所以这样是不正确的。
            arr[a][b] = count;
            a = a + move_x[d];
            b = b + move_y[d];
            if(a < 0 || a >=n || b < 0 || b >=n || arr[a][b]){
                //如果发生了越界,或者这一部已经走过了,那么就更换方向
                d = (d + 1) % 3;
                a = a + move_x[d];
                b = b + move_y[d];
            }
            */
            arr[x][y] = count;//当前的位置
            a = x + move_x[d];//获取当前位置移动的下一格,然后判断是否会发生越界或者是否已经走过了,如果是,那么就修改移动方向
            b = y + move_y[d];
            if(a < 0 || a >=n || b < 0 || b >=n || arr[a][b]){
                //如果发生了越界,或者这一部已经走过了,那么就更换方向
                d = (d + 1) % 3;
                a = x + move_x[d];
                b = y + move_y[d];
            }
            x = a;
            y = b;
            count++;
        }
      }
    
      for(i = 0; i < n; i++){
        for(j = 0; j <= i; j++){
            printf("%5d",arr[i][j]);//将数字输出,并且按照右对齐的方式输出
        }
        printf("\n");
      }
      return 0;
    }
    
    

    运行结果:
    在这里插入图片描述

    如果不是三角形,是一个方形怎么办呢?其实理解了上面之后,解题就很简单了,只要将移动方向的数组变成4格方向即可,分别初始它的值为: move_x[4] = {1,0,-1,0},其中move_x[0]表示向下移动,move_x[1]表示向右移动,move_x[2]表示向上运动,move_x[3]表示向左移动.move_y[4] = {0,1,0,-1},其中move_y[0]表示向下运动,move_y[1]表示向右移动,move_y[2]表示向上移动,move_y[3]表示向左移动值得一提的是,如果对应的移动方向要求不是这样的话,那么就需要重新进行修改move_x,move_y数组的值.
    这时候,如果输入的是5,那么最后输出的是如下图:
    在这里插入图片描述
    对应的代码:

    #include<stdio.h>
    #define N 45
    int main(){
      int i,j,n;
      int arr[N][N]={0};
      int move_x[4] = {1,0,-1,0},move_y[4] = {0,1,0,-1};//定义两个数组,表示移动的方向
      int x = 0,y = 0,a = 0,b = 0,d = 0,count = 1;//count统计各个下标下的值
      scanf("%d",&n);
      for(i = 0; i < n; i++){
        for(j = 0; j < n; j++){
            //printf("d = %d, a = %d ,b = %d,x = %d ,y = %d ,count = %d\n",d,a,b,x,y,count);
            arr[x][y] = count;
            a = x + move_x[d];
            b = y + move_y[d];
            if(a < 0 || a >=n || b < 0 || b >=n || arr[a][b]){
                //如果发生了越界,或者这一部已经走过了,那么就更换方向
                d = (d + 1) % 4;//由于有4个方向,那么就要%4
                a = x + move_x[d];
                b = y + move_y[d];
            }
            x = a;
            y = b;
            count++;
        }
      }
      printf("\n");
      for(i = 0; i < n; i++){
        for(j = 0; j < n; j++){
            printf("%5d",arr[i][j]);
        }
        printf("\n");
      }
      return 0;
    }
    
    

    运行结果:
    在这里插入图片描述
    蛇形矩阵:
    输入样例:5
    输出:
    在这里插入图片描述
    通过图片分析,我们可以知道,每一行都是向着斜向上的方向移动,所以这时候我们可以通过循环即可实现向斜向上的方向移动,只需要改变对应的下标即可
    对应的代码:

    #include<stdio.h>
    #define N 45
    int main(){
      int arr[N][N] = {0};
      int n;
      int a = 0,b = 0,count = 1,i,j;//x、y表示当前的位置
      printf("请输入N:");
      scanf("%d",&n);
      for(i = 0; i < n; i++){
        a = i;
        b = 0;//重置a、b,使得a一开始等于i,b等于0
        for(j = 0; j <= i; j++){
            arr[a--][b++] = count++;//改变对应的下标即可实现向着斜向上的方向移动
        }
      }
      //输出的时候需要注意,他并不是第i行就有i个数,相反,第i行他就有n - i个数
      for(i = 0; i < n; i++){
        for(j = 0; j < n - i; j++){
            printf("%5d",arr[i][j]);
        }
        printf("\n");
      }
      return 0;
    }
    
    

    运行结果:
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 蛇形填数(三角形

    千次阅读 2018-08-07 10:36:01
    蛇形填数一样,只是填数要求按照三角形填。注意每组数据之间用空行隔开 输入 第一行有一个N,表示N组测试数据 接下来每组数据包括一个数字X,表示三角形的边长,0&lt; X &lt;1000 输出 输出之后填好...
  • } } 数字三角形 给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。 7 3 8 8 1 0 2 7 4 4 4...
  • C++输出蛇形三角矩阵

    2020-11-28 10:54:48
    输入正整数n(n<30),输出1到n的蛇形...当所输数字不能组成满三角形时,将大于n的部分输出空字符,如n=8时所示。 代码实现: void print(int n){ int a[30][30]; int row=0,col=0; int R=ceil(n/2.0);//获取行
  • 信息学奥赛C++语言: 数字三角形

    千次阅读 2019-08-07 07:56:19
    输入一个正整数 n,输出 n 行的数字三角形。其中,第 1 行为数字 1,第 2 行为数字 23,第 3行为数字 456,第 4 行为数字 7890,第 5 行为数字 12345,… 【输入】 一行一个正整数 n,1≤n≤100。 【输出】 n 行的...
  • 蛇形填数一样,只是填数要求按照三角形填。注意每组数据之间用空行隔开 输入第一行有一个N,表示N组测试数据 接下来每组数据包括一个数字X,表示三角形的边长,0 输出 输出之后填好之后的图 ...
  • 【分析】:  类比数学中的矩阵,我们可以用一个所谓的二维数组来储存题目中的方阵。可以声明int a[30][50]这样的数组,第一维下标范围是0,1,2,…,29,第二维下标范围是0,1,2,…,49。 让我们从1开始依次填写。...
  • 先看看这个简单的,这是一个给定边长的等腰直角数字三角形。像这种还是比较简单的。 分析:两种方法;一种是用数组,还有一种是直接使用循环。这样的三角形既没对齐,又不需要过多地计算,所以使用第二种方法要简单...
  • [tempCol-1] == i: result.insert(0,[tempRow,tempCol-1]) elif tempRow+1 蛇形矩阵 题目说明 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。 样例输入 5 样例输出 1 3 6 10 15 2 5 9 14 4 8 13...
  • Java数字蛇形三角形

    2021-06-30 18:56:07
    用Java怎么打印出蛇形等腰三角形,如果超过9就变成0,求大神指点,本人想了一天没想出来 例: 1 7 2 8 6 3 0 9 5 4
  • S蛇形数阵 编程输入一个正整数N(N<15),输出N阶蛇形数阵,输出格式见样例。 输入样例: 5 输出样例:(每个数字占3列,每个数字后一个空格) 001 002 003 004 005 010 009 008 007 006 011 012 013 014 015 ...
  • 蛇形取数之【特殊的三角形

    千次阅读 2014-04-23 09:04:47
    题目描述有这样一种特殊的N阶的三角形,当N等于3和4时,矩阵如下:请输出当为N时的三角形。输入格式输入有多组数据,每行输入一个正整数N,1输出按照给出的样例进行输出样例输入3样例输出1 2 63 54#include int n...
  • 蛇形问题

    2017-07-06 14:52:19
    #include #include #define maxn 20 int a[maxn][maxn]; int main(int argc, char *argv[]) { int n,tt=0,x,y; scanf("%d",&n); memset(a,0,sizeof(a)); tt=a[x=0][y=n-1]=1; ...while(x+
  • 蛇形数组填充讲解

    2020-12-12 17:29:46
    计蒜客 - T1143 蛇形数组填充 题目: 用数字1,2,3,4, . . .n,n*n这n的平方个数蛇形填充该数组。 蛇形填充方法为: 对于每一条左下-右上的斜线,从左上到右下依次编号 按编号从小到大的顺序,将数字从小到大填入各...
  • 本贴包括,蛇行矩阵 蛇形填数 回形取数 等蛇行系类(C语言详解) 问题 1097: 蛇行矩阵 ...蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。 输入 本题有多组数据,每组数据由一个正整...
  • dp入门 数字三角形

    2018-08-07 17:24:30
    dp入门 数字三角形 人人为我型 递推式 专门为初学dp算法的新手准备
  • 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。 输入 本题有多组数据,每组数据由一个正整数N组成。(N不大于100) 输出 对于每一组数据,输出一个N行的蛇形矩阵。两组输出之间不要额外的空行。矩阵三角...
  • 有关蛇形填数的问题

    2016-03-29 15:27:51
    最常见的蛇形填数问题是:在n*n方阵里填入1,2,3,......,n*n,要求填成蛇形。 下面我就直接上代码了,代码都是可以直接在编译器上运行的。 #define _CRT_SECURE_NO_WARNINGS #include #include #define len ...
  • 【题目来源】:TYVJ 1076 ...   【解题思路】: 刚开始没想到思路,想到暴力穷举会超时,就乖乖的使用动态规划,但怎么使用想的一团,晕了, 真正独立做起题目来感觉动态规划还没入门的样子,就又重新从最基础的一...
  • 输入蛇形数(C语言)

    2010-09-25 22:16:08
    输入蛇形数(C语言) #include<stdio.h>...
  • 刷题,面试都遇到了好多关于蛇形填数的题,以前也做过,觉得没什么难度,只要自己仔细写的话都是没什么问题的,不过正经自己来写的话发现问题一大堆,于是今天进去写了一下。 主体思路就是,定义一个dir方向数组...
  • 蛇形填数

    2013-08-28 04:01:07
    唉! 晒网晒了三天了吧,打渔吧 - -! 师父放假过他自己私生活...蛇形填数啊 题在书上粘不过来哈哈   自己的糙代码: #include int main() { int n,a[10][10],i,j,k,m; while(scanf("%d",&n)!=EOF) { k=1,j=n-1;
  • 上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 784
精华内容 313
关键字:

蛇形数字三角形

友情链接: Form1.rar