(详细)杨辉三角

   杨辉三角就是像下面数列一样,通过观察,可以看到下一行的数据是上一行相邻数的和。我们就可以根据这个规律来写代码。

   1
   1 1                                                   
   1 2 1                                                 
   1 3 3 1                                             
   1 4 6 4 1                                          
   1 5 10 10 5 1                                   
   1 6 15 20 15 6 1

先定义一个数组arr[20][20],来表示这些数。可以看到第一行有1个数,第二行有两个数,那么低n行就有n个数,不能过于大。

1.首先确定数组的每一行最左边和最右边的1

for ( int i = 1; i <= n; i++)
	{
		arr[i][1] = arr[i][i] = 1;
	}

2.再确定数组中间的部分,从第三行第二列出发打印,也就是下一行是上一行相邻数的和,

for (i = 3; i <= n; i++)//从第三行第二列开始打印数组内部内容
	{
		for (j = 2; j <= i-1; j++)
		{
			arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];	
		}
	}

 3.开始打印之前,我们可以把它弄得更好看一些,即三角形形状的。后面的数越来越大,占得位越来越多,所以我们可以提前设置打印的数占6位。观察下图我们可以看到如果只打印2行,第一行就打印3个空格,只打印4行,第一行就打印3*3个空格,只打印5行就打印4*3个空格,所以打印n行的话就打(n-1)*3个空格,代码如下

《(详细)杨辉三角》

	for (i = 1; i <= n; i++)
	{
		for (j = 1; j <= n - i;j++)
		{
			printf("   ");//因为下面是printf("%6d", arr[i][j]);所以是3个空格
		}
		for (j = 1; j <=  i; j++)
		{
			printf("%6d", arr[i][j]);
		}
		printf("\n");
	}

 完整代码如下所示:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
                         
int main()
{
	int n=0;//代表要打印的行数,尽量不要太大,会影响打印效果
	while (n <= 0 || n >= 14)//限制行数,避免影响打印效果
	{
		printf("请输入需要打印的行数:");
		scanf("%d", &n);
	}
	int i = 1; int j = 1; //i控制行,j控制列
	int arr[20][20] = { 0 }; 
	for ( i = 1; i <= n; i++)
	{
		arr[i][1] = arr[i][i] = 1;//令两边的数都为1令最左边的arr[i][1]=1,最右边的arr[i][i]=1
	}
	for (i = 3; i <= n; i++)//从第三行第二列开始打印数组内部内容
	{
		for (j = 2; j <= i-1; j++)
		{
			arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];	
		}
	}
	for (i = 1; i <= n; i++)
	{
		for (j = 1; j <= n - i;j++)
		{
			printf("   ");//因为下面是printf("%6d", arr[i][j]);所以是3个空格
		}
		for (j = 1; j <=  i; j++)
		{
			printf("%6d", arr[i][j]);
		}
		printf("\n");
	}
     system("pause");
     return 0;
}

 

    原文作者:杨辉三角问题
    原文地址: https://blog.csdn.net/qq_41158320/article/details/84387630
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞