题目描述
给出 n(n<=20),输出杨辉三角的前 n 行。
如果你不知道什么是杨辉三角,可以观察样例找找规律。
输入格式
输入只有一行,为一个不大于20的正整数N。
输出格式
输出杨辉三角形的前N行。每一行相邻两个整数之间只有一个空格,最后一个数之后没有多余的空格。
样例
样例输入1
5
样例输出1
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
用递推
#include <stdio.h>
int main()
{
int i,j;
int a[10][10];
printf("\n");
for(i=0;i<10;i++) {
a[i][0]=1;
a[i][i]=1;
}
for(i=2;i<10;i++)
for(j=1;j<i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=0;i<10;i++) {
for(j=0;j<=i;j++)
printf("%5d",a[i][j]);
printf("\n");
}
}
这个对吗?
注:参考了https://blog.csdn.net/minghaibuai/article/details/124046068
杨辉三角形的每一行其实就是一组组合数,就只需要把每个组合数算出然后依次输出就好了。
#include<bits/stdc++.h>
using namespace std;
int C(int n,int m);
void H(int x);
int main(){
int n,i;
cin>>n;
for(i=0;i<n;i++)
H(i);
return 0;
}
void H(int x){
int i;
for(i=0;i<=x;i++){
if(i==0) cout<<C(x,i);
else cout<<" "<<C(x,i);
}
cout<<endl;
}
int C(int n,int m){
int i;
long J=1,K=1;
m=m<(n-m)?m:(n-m);
if(m==0) return 1;
for(i=1;i<=m;i++)
J*=i;
for(i=0;i<m;i++)
K*=(n-i);
return K/J;
}