一维数组解决贝尔三角的输出

一维数组解决贝尔三角的输出

在组合数合里,贝尔数给出了集合划分的数目,以数学家埃里克·坦普尔·贝尔(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");//一行输完,换行  
        }  
    }  

最后,感谢林福平老师的指导

猜你喜欢

转载自blog.csdn.net/u014772246/article/details/51759517