c++/c语言 杨辉三角(详细讲解)。

杨辉三角如下图形式

在这里插入图片描述
但是有什么方法可以打出此图呢?
我们可以把空位都补为0,从而找出其中的规律。

空位补0后就如下图所示。

在这里插入图片描述
在这里插入图片描述
我们把行数和列数分别设为 r 和 c ;

在上图中我们可以发现:

r = 4 时, c = 9 ;

r = 7 时, c = 15 ;

可以得到这样的规律;

c = 2*r +1 而且第一行第一个数的下标为 c/2 向下取整得到

此外我们还可以看出:
一行中的一个数字为上一行的斜对这的两个数相加的和。
如果用matrix [r] [c] , 这样的数组来储存所有数,i,j分别为for中的行和列,可以得到这样的规律:

matrix [ i ] [ j ] = matrix [ i-1 ] [ j-1 ]+ matrix [ i-1 ] [ j+1 ] 。

所以可以得到代码如下:

#include<bits/stdc++.h>
using namespace std;
int main() {
//	int r,c;//分别表示r行和c列。
	int r,c;
	cin>>r;
	c=2*r+1;//列数与行数的关系。
	int r_one=c/2;//第一行的第一个数。(以第一行的第一个数为起点)
	int matrix[r][c]; //把所有r行c列的所有点都标为0。
	memset(matrix,0,sizeof(matrix));//这里是把二维数组所有项都初始化为零
	matrix[0][r_one]=1;
	for(int i=1; i<r; i++) {
		for(int j=1; j<c; j++) {
			matrix[i][j]=matrix[i-1][j-1]+matrix[i-1][j+1];
		}
	}
	for(int i=0; i<r; i++) {
		for(int j=0; j<c; j++) {
			if(matrix[i][j]==0)
				printf(" \t");
			else
				printf("%d\t",matrix[i][j]);
		}
		cout<<endl;
	}
	return 0;
}

拿走不谢。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值