精华内容
下载资源
问答
  • 打印杨辉三角

    2017-03-22 19:45:37
    利用二维数组打印杨辉三角
  • // 循环队列队列的顺序存储结构 #include<stdio.h> #include<malloc.h> #include<process.h> //exit 的头文件 #define OK 1 #define ERROR 0 #define MAXQSIZE 100// 最大队列长度 #define Status int #define N 10 ...
  • 二维数组的赋值:打印杨辉三角形(要求打印8行)
  • 数据结构课后作业,自己写的,用队列的方法打印杨辉三角
  • C++打印杨辉三角

    2013-04-02 18:34:19
    C++打印杨辉三角
  • 打印杨辉三角形

    2020-08-07 18:26:51
    //申请一个数储存计算杨辉三角形 using namespace std; void PrintSpace(int n) { //打印n个空格 for (int i = 0; i < n; i++) { cout << ' '; } } int main() { int n = 6; // cin>>n;//题目...
    #include<iostream>
    #define Max 10
    int Y[Max][Max] = {0};//申请一个数储存计算杨辉三角形
    using namespace std;
    void PrintSpace(int n) { //打印n个空格
    	for (int i = 0; i < n; i++) {
    		cout << ' ';
    	}
    }
    int main() {
    	int n = 6;
    //	cin>>n;//题目要求6
    	//初始化三角形的前两行。同时从 1 1 开始使用数组
    	for (int i = 0; i < n; i++) {
    		for (int j = 0; j <= i; j++) {		
    			if (j == 0 || j == i) Y[i][j] = 1; //杨辉Y[i][j]中;每一行第一个为1,最后一个为1;
    			//其中第一个即为i=0时,最后一个为,i=j的时候。  其中i表示行的时候是从第0行开始的,因此j要+1,也就是从0到i;
    
    			else Y[i][j] = Y[i - 1][j] + Y[i - 1][j - 1];
    			
    		}
    	}
    	for (int i = 0; i < n; i++) {
    		PrintSpace(n - (i+1)); //第一行应该有n个空格。第二行有n-1个空格。 由于数组中,从第0行开始,因此应该有n-(i+1)个空格
    		int flag = 0;
    		for (int j = 0; j <= i; j++) {
    			if (flag == 0)cout << Y[i][j];
    			else cout << ' ' << Y[i][j];
    			flag++;
    		}
    		cout << endl;
    	}
    }
    
    

    在这里插入图片描述

    展开全文
  • 这个方法可以在执行过程中有效地节约内存和CPU的使用率!用的是数组中的锯齿数组!
  • 打印杨辉三角形:完成队列的应用,逐行打印二项展开式 (a + b)i 的系数。
  • 打印杨辉三角的9种方法与解析

    千次阅读 2021-07-23 13:53:27
    打印杨辉三角 杨辉三角科普: 杨辉三角,是二项式系数在三角形中的一种几何排列。每个数等于它上方两数之和。如图: C语言打印杨辉三角的方法 解法一 #include <stdio.h> int main() { int i, j, n = 0; //...

    打印杨辉三角

    杨辉三角科普:
    杨辉三角,是二项式系数在三角形中的一种几何排列。每个数等于它上方两数之和。如图:杨辉三角
    C语言打印杨辉三角的方法
    解法一

    #include <stdio.h>
    int main()
    {
        int i, j, n = 0;
        //首先定义二维数组计数符号i,j 还有杨辉三角行数的初始化
        int a[100][100] = { 0 };
        //二维数组大小可自定,但切记不可使其超过整形数组的大小
        while (n < 1 || n >100)
            //在输入的值不正确时自动初始化问题,重新输入
        {
            printf("请输入要打印的杨辉三角行数>:");
            scanf("%d", &n);
        }
        for (i = 0; i < n; i++)
            a[i][0] = 1;
            //每一行第一个为1,用第一个for循环的输入
        for (i = 1; i < n; i++)//第一层循环i决定第几行
            for (j = 1; j <= i; j++)//第二层循环借用i限制每行字符数目
                a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
        for (i = 0; i < n; i++)//一个for循环逐行打印叫a的二维数组
        {
            for (j = 0; j <= i; j++)
                printf("%5d", a[i][j]);
            printf("\n");
        }
        return 0;
    }
    

    解法二

    #include <stdio.h>
    int main()
    {
        int i, j, n = 0;
        //首先定义二维数组计数符号i,j 还有杨辉三角行数的初始化
        int a[100][100] = { 1 };
        //二维数组大小可自定,但切记不可使其超过整形数组的大小
        while (n < 1 || n >100)
            //在输入的值不正确时自动初始化问题,重新输入
        {
            printf("请输入要打印的杨辉三角行数>:");
            scanf("%d", &n);
        }
        for (i = 1; i < n; i++)//第一层循环i决定第几行
        {
            a[i][0] = 1;
            for (j = 1; j <= i; j++)//第二层循环借用i限制每行字符数目
                a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
        }
        for (i = 0; i < n; i++)//一个for循环逐行打印叫a的二维数组
        {
            for (j = 0; j <= i; j++)
                printf("%5d", a[i][j]);
            printf("\n");
        }
        return 0;
    }
    //把每一行的第一个初始化1的操作包入第一个for循环中,并且改动二维数组初始化值为1
    

    解法三

    #include <stdio.h>
    int main()
    {
        int i, j, n = 0;
        //首先定义二维数组计数符号i,j 还有杨辉三角行数的初始化
        int a[100][100] = { 0,1 };
        //只有2个初值,即a[0][0]=1,a[0][1]=2,其余数组元素的初值均为0
        //二维数组大小可自定,但切记不可使其超过整形数组的大小
        while (n < 1 || n >100)
            //在输入的值不正确时自动初始化问题,重新输入
        {
            printf("请输入要打印的杨辉三角行数>:");
            scanf("%d", &n);
        }
        for (i = 1; i < n; i++)//第一层循环i决定第几行
            for (j = 1; j <= i; j++)//第二层循环借用i限制每行字符数目
                a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
        for (i = 1; i < n; i++)//一个for循环逐行打印叫a的二维数组
        {
            for (j = 1; j <= i; j++)
                printf("%5d", a[i][j]);
            printf("\n");
        }
        return 0;
    }
    //优化于方法一二,取消二维数组中第一列赋值为1的做法,且在最后输出时略有改动
    

    解法四

    #include <stdio.h>
    int main()
    {
    	int i, j, n = 0;
    	//首先定义二维数组计数符号i,j 还有杨辉三角行数的初始化
    	int a[100][100] = { 0,1 };
    	//二维数组大小可自定,但切记不可使其超过整形数组的大小
    	while (n < 1 || n >100)
    		//在输入的值不正确时自动初始化问题,重新输入
    	{
    		printf("请输入要打印的杨辉三角行数>:");
    		scanf("%d", &n);
    	}
    	for (i = 1; i < n; i++)//第一层循环i决定第几行
    	{
    		for (j = 1; j <= i; j++)//第二层循环借用i限制每行字符数目
    		{
    			a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
    			printf("%5d", a[i][j]);
    		}
    		printf("\n");
    	}
    	return 0;
    }
    //优化于解法三,仅将赋值输出同时进行,且注意换行符的位置更替。
    

    解法五

    #include <stdio.h>
    int main()
    {
    	int i, j, n = 0;
    	//首先定义二维数组计数符号i,j 还有杨辉三角行数的初始化
    	int a[100] = { 1 };
    	int b[100] = { 0 };
    	while (n < 1 || n >100)
    		//在输入的值不正确时自动初始化问题,重新输入
    	{
    		printf("请输入要打印的杨辉三角行数>:");
    		scanf("%d", &n);
    	}
    	for (i = 0; i < n; i++)
    	{
    		b[0] = a[0];
    		for (j = 1; j <= i; j++)
    			b[j] = a[j - 1] + a[j];
    		for (j = 0; j <= i; j++)
    		{
    			a[j] = b[j];
    			printf("%5d", a[j]);
    		}
    		printf("\n");
    	}
    	return 0;
    }
    //解法五不同于前者,使用两个一维数组能够较好的节省空间,方法可行,but运行方式有待我仔细酌定。
    

    解法六

    #include <stdio.h>
    int main()
    {
    	int i, j, n = 0;
    	int l, r;
    	//首先定义二维数组计数符号i,j 还有杨辉三角行数的初始化
    	int a[100] = { 0,1 };
    	while (n < 1 || n >100)
    		//在输入的值不正确时自动初始化问题,重新输入
    	{
    		printf("请输入要打印的杨辉三角行数>:");
    		scanf("%d", &n);
    	}
    	for (i = 1; i < n; i++)
    	{
    		l = 0;
    		for (j = 1; j <= i; j++)
    		{
    			r = a[j];
    			a[j] = l + r;
    			l = r;
    			printf("%5d", a[j]);
    		}
    		printf("\n");
    	}
    	return 0;
    }
    //解法六使用一个一维数组,再加两个临时变量进行操作
    

    解法七:使用一维数组,占用内存少

    #include <stdio.h>
    int main()
    {
        int i, j, n, k, t; 
    	long Buf[21]={0,1};    //用于保存一行数据
    	printf("请输入杨辉三角形的行数(1 ~ 20):");
    	scanf("%d",&n);
        for( i = 1; i <= n; i++)	//输出n行
        {
    		for( j = 0; j < n - i; j++)	//每行前面补空格,形成等腰三角图案	
    			printf("   ");
    		t = 0;
            for( j = 1; j <= i; j++)//计算并输出杨辉三角形
            {
    			k = Buf[j];
    			Buf[j] = t + k;		//每个数是上面两数之和(三角计算)
    			t = k;
                printf("%6d", Buf[j]);	
            }
            printf("\n");
        }
    	return 0;
    }
    

    解法八:使用递归函数法,程序最简,占用内存最少,最佳算法

    #include <stdio.h>
    long Tri(int r, int c) //杨辉三角算法函数	   
    {
    	return (c == 1 || c == r) ? 1 : Tri( r - 1, c - 1 ) + Tri( r - 1, c ); 
    }	
    int main() 
    {
        int i, j, n; 
    	printf("请输入杨辉三角形的行数(1 ~ 20):");
    	scanf("%d", &n);
        for( i = 1; i <= n; i++)	// 输出n行
        {
    		for( j = 0; j < n - i; j++)		//每行前面补空格,显示成等腰三角形	
    			printf("   ");
            for( j = 1; j <= i; j++)
                printf("%6d", Tri(i, j));	//计算并输出杨辉三角形	
            printf("\n");
        }
    	return 0;
    }
    
    

    解法九(来源于百度百科,特此整理记录)

    #include<iostream>
    #include<iomanip>
    using namespace std;
    int main()
    {
        const int n = 15;
        const int m = 2 * n-1;
        int arr[n + 1][m] = { 0 };
        for (int i = 0; i < n; i++)
        {
            arr[i][n - i- 1] = 1;
            arr[i][n + i -1] = 1;
     
        }
        for (int i = 2; i < n; i++)
            for (int j = n - i + 1; j < n-2+i; j = j + 2)
                arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j + 1];
        int p;
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n - i - 1; j++)
                cout << "    ";
            p = 1;
            for (int j = n - i - 1; p < i + 2; j = j + 2)
            {
                cout << setw(4) << arr[i][j] << "    ";
                p = p + 1;
            }
            cout << endl;
        }
        return 0;
    }
    

    例题HDOJ 2032 杨辉三角
    解析HDOJ 2032 杨辉三角解析

    展开全文
  • 使用C++语言,数据结构基础从而利用队列实现杨辉三角打印
  • c语言 打印杨辉三角

    2013-12-03 10:38:49
    c语言 打印杨辉三角
  • 杨辉三角,是二项式系数在三角形中的一种几何排列 每个数等于它上方两数之和。 每行数字左右对称,由1开始逐渐变大。 第n行的数字有n项。 第n行数字和为2n-1。 第n行的m个数可表示为 C(n-1,m-1),即为从n-1个...
  • 数组-打印杨辉三角

    2021-06-04 13:05:45
    杨辉三角特点:(1)每行第一个元素及最后一个元素都为1;(2)中间元素都是上一行对应元素与对应元素前一元素之和。 程序思路:(1)用一个循环给每行第一个元素赋值为1;

    杨辉三角特点:(1)每行第一个元素及最后一个元素都为1;(2)中间元素都是上一行对应元素与对应元素前一元素之和。

    程序思路:

    (1)用一个循环给每行第一个元素赋值为1;

    for (int i = 0; i < 7; i++) {
    		int j = 0;
    		a[i][j] = 1;
    	}    

    (2)用循环给每行最后一个元素赋值为1;

    for (int i = 1; i < 7; i++) {
    		
    		a[i][k] = 1;
    		k = i + 1;
    	}    

    (3)用循环计算其余中间元素的值;

    for (int i = 2; i < 7; i++) {
    		for (int n = 1; n <i; n++) {
    			a[i][n] = a[i - 1][n - 1] + a[i - 1][n];
    		}
    	}

    (4)最后循环打印杨辉三角;

    for (int i = 0; i < 7; i++) {
    		for (int n = 0; n < i+1; n++) {
    			printf("%d ", a[i][n]);
    		}
    		printf("\n");
    	}

    程序总的代码:

    #include <stdio.h>
    int main (){
    	int a[7][7];
    	int k = 1;
    	for (int i = 0; i < 7; i++) {
    		int j = 0;
    		a[i][j] = 1;
    	}             //用循环给每行第一个元素赋值为1
    	for (int i = 1; i < 7; i++) {
    		
    		a[i][k] = 1;
    		k = i + 1;
    	}            //用循坏给每行最后一个元素赋值为1
    	for (int i = 2; i < 7; i++) {
    		for (int n = 1; n <i; n++) {
    			a[i][n] = a[i - 1][n - 1] + a[i - 1][n];
    		}
    	}
    	for (int i = 0; i < 7; i++) {
    		for (int n = 0; n < i+1; n++) {
    			printf("%d ", a[i][n]);
    		}
    		printf("\n");
    	}
    	return 0;
    }
       

    运行结果:

    总结:(1)一开始想的是用七个一维数组,在定义的时候直接初始化为杨辉三角的值,然后直接输出,但这意味着要写七个printf函数。过于笨拙。(2)后来又想到用二维数组,同样在定义的时候初始化为杨辉三角值,然后循环输出。但是这样的话,如果行数较少也勉强可行,一旦行数过多同样会显得笨拙,而且后期更改维护也较为复杂。(3)最后决定不偷懒,老老实实写代码。用循环给各个元素赋值,再循环输出。也就是上述代码。(4)因为除了杨辉三角的值,其余数组元素是没有或者待定的。因为我一开始输出的是整个a[7][7]的值,即输出结果应该是一个七阶行列式,但是除了杨辉三角的值,其余值未知,所以产生溢出。然后我给其他未知部分用空格给他们赋值,结果还是溢出,原因很明显,我的数组定义的int型,空格属于字符型。最后灵机一动,为什么要输出整个数组呢,我需要的是杨辉三角,那便只输出杨辉三角部分即可。以上就是我对杨辉三角的全部思考。

     

     

    展开全文
  • 用队列打印杨辉三角

    2021-09-23 09:51:52
    1、用队列打印杨辉三角 队列的实现以及基本功能请参考:https://blog.csdn.net/qq_50504109/article/details/120384457 /** * 用队列打印杨辉三角的思路就是跟数组一样的,用前一列求出后面一列 * 不过队列不像...

    1、用队列打印杨辉三角

    队列的实现以及基本功能请参考:https://blog.csdn.net/qq_50504109/article/details/120384457

    /**
     *           用队列打印杨辉三角的思路就是跟数组一样的,用前一列求出后面一列
     *           不过队列不像数组有固定的公式可以求出特定位置的元素,我们需要通过元素的进出来求的
     *           我们需要前面一列下出列一个,然后在获得当前的 GetHead(Q,&x)值,相加才能得到下一行的元素;
     *           每次第n行元素求完之后,还需要把n-1行的最后一个元素给删除掉;
     *
     */
    
    #include<stdio.h>
    #include"InstanceQueue.c"
    
    int main(){
        void YangHUiTriangle();
        YangHUiTriangle();
    
    }
    
    void YangHUiTriangle(){
               int n = 0,x = 0,temp = 0 ;
            Queue Q = InitQueue();
            EnterQueue(Q,1);
           printf("请输入要打印的行数:");
            scanf("%d",&n);
    
     if (n < 2){
            printf("输入的行数不正确,请重新输入!");
            scanf("%d",&n);
        }
    
        for (int i = 2; i <= n ; ++i) {
              EnterQueue(Q,1);//每行的一个元素时1
            for (int j = 1; j <= i-2; ++j) {  // 每行需要产生的元素的个数是 n - 2个(除去了1)
                             DeleteQueue(Q,&temp);
                             printf("%d",temp);
                             GetHead(Q,&x);  // 太搞心态啦呜呜呜,这个GetHead函数我在判断是否为空的时候少打了一个等号,找bug找半天
                             temp = temp+x;
                             EnterQueue(Q,temp);//利用n-1行的元素,进栈第n行的元素,
            }
            DeleteQueue(Q,&x);//出列n-1行的最后一个元素
            printf("%d",x);
            EnterQueue(Q,1);//每行的最后一个元素时1
        }
        while (!isEmpty(Q)){
              DeleteQueue(Q,&x);
              printf("%d",x);
        }
    }
    
    展开全文
  • @使用队列打印杨辉三角(c++) 需要注意的我每行前面并没有打印空格,如果你有需要可以自行修改。 #include<bits/stdc++.h> using namespace std; void fun(int n) { queue<int>q; int temp = 0;//记录...
  • Python打印杨辉三角

    千次阅读 2020-05-10 19:44:36
    题目:python打印杨辉三角 杨辉三角性质有很多,我们的程序主要运用以下性质 第n行的m个数可表示为 C(n-1,m-1),即为从n-1个不同元素中取m-1个元素的组合数。 第n行的数字有n项 大致形状(来自百科) 程序运行...
  • C++打印杨辉三角形

    2021-09-10 21:39:49
    C++打印杨辉三角形 #include <iostream> using namespace std; int *yanghui(int); void display(int *a,int size); int main(){ yanghui(10); } int *yanghui(int ceng){ if(ceng==1){ int arr[1]...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,750
精华内容 3,500
关键字:

打印杨辉三角