for循环打印之利用二维数组储存数据

一,杨辉三角

  1,组合数性质之这世界总有人是例外

    领导想在30人的班级里选10个人,然而,有一个是例外,刚开始这人家徒四壁,被淘汰了,于是c(30,10)就变成了c(29,10)

  第二天,这人中彩票了,于是他就被内定了,于是就变成了c(29,9)。对于所有人来讲,这两种选择都是不公平的,但根据分类加法计数原理,

  这两情况加起来就包含了所有情况,即c(30,10)=c(29,10)+c(29,9),the end。 

int i, j, n;
    while (scanf("%d", &n) != EOF)
    {
        for (i = 1; i <= n; i++)
        {
            for (j = 1; j <= i; j++)
            {
                if (i == 1 && j == 1)
                {
                    a[i][j] = 1;
                    printf("1");
                }
                else
                {
                    a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
                    printf("%-5d", a[i][j]);
                }
            }
            printf("\n");
        }
        printf("\n");
    }
    

  2,当然也可以直接用公式,不但省时间,而且省空间

int s = 1, h;
    int i, j;
    while (scanf("%d", &h) != EOF)
    {
        printf("1\n");
        for (i = 2; i <= h; s = 1, i++)      //少了第一行 所以 i从2开始       
        {
            printf("1");

            for (j = 1; j <= i - 2; j++)       // 少了第一个和最后一个  所以减2
                printf(" %d", (s = (i - j) * s / j));     //组合数 累乘和累除  
                                                          //除法要放最后面 才可以保证整除
            printf(" 1\n");
        }
    }

  

猜你喜欢

转载自www.cnblogs.com/asdfknjhu/p/12114913.html