1 1 1 1 2 1 1 3 3 1 1 4 6 4 1
根据它的性质,每行行首是1,每行行尾也是1,除此外其余数都为其上一列的数加上上一列的数的前面那个数。可以写出程序。
#include <stdio.h> int main(void) { int n = 0; printf("请输入你想输入的行数\n"); scanf("%d", &n); int array[n][n]; for (int i = 0; i < n; i++) array[i][0] = array[i][i] = 1;//行首行尾为1 for (int i = 2; i < n; i++) for (int j = 1; j < i; j++)//j(列数)不能大于i(行数) array[i][j] = array[i - 1][j - 1] + array[i - 1][j];//求和 for (int i = 0; i < n; i++)//打印 { for (int j = 0; j <= i; j++) printf("%4d", array[i][j]); printf("\n"); } return 0; }可以根据公式来算,看下面的 C n 1 = C n n − 1 = 1 C^1_n = C^{n-1}_ n= 1 Cn1=Cnn−1=1
C 2 1 = 2 C^1_2 = 2 C21=2
C 3 1 = 3 C^1_3 = 3 C31=3
C 4 2 = 6 C^2_4 = 6 C42=6 C n r = A n r r ! = n ! r ! ( n − r ) ! C^r_n = {\frac {A^r_n} {r!}}={\frac{n!} {r!(n-r)!}} Cnr=r!Anr=r!(n−r)!n! 下标正好是行数,上标正好是列数,结果也相同。
#include <stdio.h> float C(int n, int r); float Actorial(int n); int main(void) { int n = 0; printf("请输入你想输入的行数\n"); scanf("%d", &n); int array[n][n]; for (int i = 0; i < n; i++) { for (int j = 0; j <= i; j++) printf("%4.0f", C(i, j)); printf("\n"); } return 0; } float C(int n, int r) { return Actorial(n) / (Actorial(r) * Actorial(n - r)); } float Actorial(int n) { float sum = 1; for (int i = 1; i <= n; i++) sum = (float)(sum * i); return sum; }也可以不用函数 C n k = n ∗ ( n − 1 ) ∗ ( n − 2 ) ∗ ( n − 3 ) ∗ … … ∗ ( n − k + 1 ) 1 ∗ 2 ∗ 3 ∗ 4 ∗ … … ∗ k C^k_n={\frac{n*(n - 1)*(n-2)*(n-3)*……*(n - k +1)}{1*2*3*4*……*k}} Cnk=1∗2∗3∗4∗……∗kn∗(n−1)∗(n−2)∗(n−3)∗……∗(n−k+1)
#include <stdio.h> float C(int n, int r); float Actorial(int n); int main(void) { int n = 0; printf("请输入你想输入的行数\n"); scanf("%d", &n); int array[n][n]; for (int i = 0; i < n; i++) { for (int j = 0; j <= i; j++) { int sum = 1; for (int k = 1; k <= j; k++) { sum = sum * (i - k + 1) / k; } printf("%3d", sum); } printf("\n"); } return 0; }