关于C++里求杨辉三角的一个程序,有地方不懂求人解答

来源:百度知道 编辑:UC知道 时间:2024/07/02 17:12:09
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int m,n,r,c;
while(cin>>m&&m!=0)
{
for (n=0;n<=m-1;n++)
{
c=1;
cout<<c<<" ";
for(r=1;r<=n;r++)
{
c=c*(n-r+1)/r;
cout<<c<<" ";
}
cout<<endl;
}
cout<<endl;
}
return 0;
}
这个程序好像是根据二项式做的,c=c*(n-r+1)/r;这句不太明白,请具体解释下~~~

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int m,n,r,c;
while(cin>>m&&m!=0)
{
for (n=0;n<=m-1;n++)
{
c=1;
cout<<c<<" ";
for(r=1;r<=n;r++)
{
c=c*(n-r+1)/r; //组合数 C(n,r)= (n!)/((n-r)!*r!)
cout<<c<<" "; //故 C(n,r)=(n!)/((n-r+1)!*(r-1)!)* ((n-r+1)/r)
} //即 C(n,r)=C(n,r-1)*((n-r+1)/r)
cout<<endl;
}
cout<<endl;
}
return 0;
}

确实,你应该看一下数学的

其实,其系数就是组合数,计算组合数就可以了。

建议你去找本高等数学,翻到二项式展开那地方,找到二项式系数的递推公式好好看看。

这条语句是求组合数C(n,r)的,因为杨辉三角形可以写成这样的形式
C(0,0)
C(1,0),C(1,1)
C(2,0),C(2,1),C(2,2)
C(3,0),C(3,1),C(3,2),C(3,3)
......
C(n,0),C(n,1),C(n,2)......C(n,n)
杨辉三角形的第n+1行就是C(n,0),C(n,1),C(n,2)...C(n,n).

C(n,r)=n*(n-1)*(n-2)...(n-r+1)/(1*2*3...*r)