最详细的杨辉三角形的讲解

        

目录

1.第一步:

 2.第二步

 3.第三步

4.第四步 

5.第五步

普遍方案


我们先以6*6的为例,文章尾有更普遍的方法

#include<stdio.h>
int main()
{
	int arr[6][6];//创建6*6的二维数组
	for (int i = 0; i < 6; i++)
	{
		for (int j = 0; j < 6; j++)
		{
			arr[i][j] = 1;
		}
	}//将二维数组中所有元素初始化为1
	for (int i = 1; i < 6; i++)
	{
		for (int j = 1; j < i; j++)
		{
			arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
		}
	}//该元素=该元素上面的元素+该元素上面的元素的前面一个元素

	for (int i = 0; i < 6; i++)
	{
		for (int j = 0; j < 15 - 3 * i; j++)
			printf(" ");//将对角线布满空格
		for (int j = 0; j <= i; j++)
			printf("%6d", arr[i][j]);//将加完后的二维数组,只打印其左下角
		printf("\n");
	}
	return 0;
}

 

先说一下思路

1.第一步:

        通过两层循环,遍历二维数组,将其都赋值为1。

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


 

2.第二步

 j<i,只取数组行大于列的部分

for (int j = 1; j < i; j++)


3.第三步

                        这是小学时学过的规律,

                        得到该公式尤为重要,

                        该元素=该元素上面的元素+该元素上面的元素的前面一个元素,

                        arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];

        在二维数组中实现的方式

将最终我们要输出的结果与现在对比,数值上是相同的,现在我们将格式变化。


4.第四步 

        这里的格式(j<15-3*i)是最多样的,不同规格的杨辉三角形有不同的大小,这里的答案也不唯一,可以将间距弄小点也可弄大点,主要看你要打印的杨辉三角的规格。

        但有几点是可以确定的,(1)  15的是需要不小于 k * i(k为这里的3,也是i的系数)的最大值。(2)k的增大与减小会影响前面的空格数量,效果如此。

 

		for (int j = 0; j < 15 - 3 * i; j++)
			printf(" ");

        该行代码是需要打印蓝色阴影区域的空格,右边的黑块不用做任何操作,打印完一行最后的元素后,及时的换行。

将下面的域宽%6d,先写出来,在根据上面我给出的规律,对(n-k*i)尝试几个值,很容易尝试出来。 

当然如果你不希望多次尝试,我也将规律总结出来,(3*N-3*i),N为你定义杨辉三角形的大小。


 

5.第五步

		for (int j = 0; j <= i; j++)
			printf("%6d", arr[i][j]);
		printf("\n");

 (1) j<i,只取数组行大于列的部分,也就是上面利用杨辉三角公式的部分二维数组。

 (2)%6d,域宽为6,右对齐,直接写6即可,不必更改。


普遍方案(答案)

上面是思路,根据思路,我们总结出更加普遍的方法(更改宏定义中N的大小即可)

#include<stdio.h>
#define N 8
int main()
{
	int arr[N][N];
	for (int i = 0; i < N; i++)
	{
		for (int j = 0; j < N; j++)
		{
			arr[i][j] = 1;
		}
	}
	for (int i = 1; i < N; i++)
	{
		for (int j = 1; j < i; j++)
		{
			arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
		}
	}

	for (int i = 0; i < N; i++)
	{
		for (int j = 0; j < 3*N - 3 * i; j++)
			printf(" ");
		for (int j = 0; j <= i; j++)
			printf("%6d", arr[i][j]);
		printf("\n");
	}
	return 0;
}

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值