输出杨辉三角

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=Cnn1=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!(nr)!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=1234kn(n1)(n2)(n3)(nk+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();
        }
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CCPigSnail

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值