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;
}
java第一种方法实现
import java.util.Scanner;
public class Array {
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
int length = in.nextInt();
int[][] array = new int[length][];
for (int i = 0; i < array.length; i++)
{
array[i] = new int[i + 1];
array[i][i] = array[i][0] = 1;
for (int j = 1; j < array[i].length - 1; j++)
{
array[i][j] = array[i - 1][j] + array[i - 1][j - 1];
}
}
for (int row[] : array)
{
for (int odd : row)
{
System.out.printf("%4d", odd);
}
System.out.println();
}
}
}