C++打印杨辉三角

C++打印杨辉三角

杨辉三角,是二项式系数在三角形中的一种几何排列。
杨辉三角是中国古代数学的杰出研究成果之一,它把二项式系数图形化,把组合数内在的一些代数性质直观地从图形中体现出来,是一种离散型的数与形的结合。
C++打印杨辉三角_第1张图片
如图所示,杨辉三角中的每个数等于它上方两数之和。每行数字左右对称,由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
#include
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开始计数。

结果图:
C++打印杨辉三角_第2张图片

你可能感兴趣的:(c++入门题目,c++,算法,c语言,杨辉三角函数,编程语言)