一维数组解决贝尔三角的输出
在组合数合里,贝尔数给出了集合划分的数目,以数学家埃里克·坦普尔·贝尔(Eric Temple Bell)命名,是组合数学中的一组整数数列。
贝尔三角形类似于杨辉三角,只是其中各个项的计算规则不同。其规则如下:
1.第一行第一项是1
2.对于n>1,第n行第一项等同第n-1行最后一项。
3.对于m,n>1,第n行第m项等于它左边和左上方的两个数之和。
相对于贝尔三角形,还有贝尔数列,它是各行连起来(第2行开始去掉最后一个元素),有关概念可以参考各种百科。
我的代码:
#include <stdio.h>
// 贝尔三角形程序,一维数组解决方案
void main(){
int n;//输到第n行
scanf("%d",&n);//输入n的值
int bell[100];//这里可以动态定义一个长度为n的数组,我是纯c,所以就先固定一个100吧
bell[0]=1;//初始化,第一行的第一个是1
printf("%d\n",1);//输出第一行
for(int i=1;i<n;i++){//遍历每一行
for(int j=i;j>0;j--){
bell[j]=bell[j-1];//当前第n列为上一行n-1列的值
}
bell[0]=bell[i];//当前列第一个为上一行最后一个的值
for(int k=1;k<=i;k++){
bell[k]+=bell[k-1];//从当前2列开始,为第n列加一个前一列的值,即当前行的第n列加上一行n-1列的值
}
for(int l=0;l<=i;l++){
printf("%d\t",bell[l]);//输出当前行的内容
}
printf("\n");//一行输完,换行
}
}
最后,感谢林福平老师的指导