一,杨辉三角
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"); } }