C++打印杨辉三角

C++打印杨辉三角

杨辉三角,是二项式系数在三角形中的一种几何排列。
杨辉三角是中国古代数学的杰出研究成果之一,它把二项式系数图形化,把组合数内在的一些代数性质直观地从图形中体现出来,是一种离散型的数与形的结合。
在这里插入图片描述
如图所示,杨辉三角中的每个数等于它上方两数之和。每行数字左右对称,由1开始逐渐变大。

tips:
在欧洲,这个表叫做帕斯卡三角形。是欧洲人帕斯卡发现的,很多题目会有多种问法,你得记住,会考的!知道杨辉发现的最早就行。(帕斯卡比杨辉发现这一图表晚了300年)
以上内容取自百度百科,是我自己总结的。 →→ 百度知道杨辉三角

关于打印杨辉三角的问题,我个人感觉用数组更容易解决,假定求c(n,r),那么c(n,r) = c(n-1,r-1) + c(n-1,r)。本次程序并没有使用数组,用的是新手入门c++更先接触的for循环的嵌套以及简单int函数。

难点是给出当前行数n和当前行数的第r个数,利用函数求出c(n,r)。

下面给出解析:
采用递推法,
第n行的第1个数为1,
第二个数就是1×(n-1),
第三个数为1×(n-1)×(n-2)/2,
第四个数为1×(n-1)×(n-2)/2×(n-3)/3
…依此类推。
借鉴思想。 →→算法之帕斯卡算法CSDN
那么,求c(n,r) 的归纳出来的结果为for循环结果:

int getResult(int n,int r){
	int p=1;
    for(int i=1;i<=r;i++){
        p=p*(n-i+1)/i;
    }
    return p;
}

很难理解是吧?我也觉得很难理解,一般都是当成公式做。

下面给出源代码:

#include<iostream>
#include<iomanip>
using namespace std;
int getResult(int n,int r){
	int p=1;
    for(int i=1;i<=r;i++){
        p=p*(n-i+1)/i;
    }
    return p;
}
int main(){
	
	int i;
	int n,r,max;
	/*
	n当前行数,r当前行数的第r个数字,max最大行数 
	*/ 
	cout<<"输入行数:";
	cin>>max;
	for(n=1;n<=max;n++){
		for(r=1;r<=n;r++){
			i=1;
			if(r==1){
				for(i=1;i<=max-n;i++)
					cout<<"   ";	//每行数字前的空格 
			}
			else
				cout<<"   ";		//每个数字前的空格 
			cout<<setw(3)<<getResult(n-1,r-1);
		}
		cout<<endl; 
	}
}

tips:
你可能会疑惑,程序里为什么是求结果为什么是函数getResult(n-1,r-1)而不是getResult(n,r)?因为我的n、r都是从1开始记数的,不是0,个人习惯吧算是,感觉更多人更喜欢从0开始计数。

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

  • 15
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值