你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

C语言 杨辉三角问题

2021/12/15 16:06:57

  今天来讲讲杨辉三角怎么用C语言表示,开门见山,我们知道杨辉三角是长这个样子的:

  这样一眼看过去好像很难的样子,那当我们把这个杨辉三角改成以下这样子,把中间的空格取消掉:

  这么一来规律就一目了然了,这不就是大家所熟悉的二维数组吗,对角线和第一列都是1,每一行的中间的元素都是上面对应的两个数相加出来的结果,那么现在着手来边写代码边分析:

//1
//1 1
//1 2 1
//1 3 3 1
//1 4 6 4 1
 

int main()
{
    int arr[10][10] = {0};
    int i = 0;
    int j = 0;

    for(i = 0; i < 10; i++)
    {
        for(j = 0; j < 10; j++)
        {
            if(j == 0)//二维数组的第一列
                arr[i][j] = 1;

            if(i == j)//二维数组的对角线
                arr[i][j] = 1;
        }
    }
  return 0;
}

  因为刚才判断出杨辉三角的第一列和对角线均为1,所以可以马上写出以上的代码,判断第一列和对角线的情况,然后取值为1。

  然后现在就开始思考,从杨辉三角的第三行才开始要算中间的元素是多少,所以这里就可以给上一个条件 if(i >= 2 && j >= 1),运算就是 arr[i][j] = arr[i-1][j] + arr[i-1][j-1],所以程序改成:

//1
//1 1
//1 2 1
//1 3 3 1
//1 4 6 4 1
 
#include<stdio.h>

int main()
{
    int arr[10][10] = { 0 };
    int i = 0;
    int j = 0;

    for(i = 0; i < 10; i++)
    {
        for(j = 0; j < 10; j++)
        {
            if (j == 0)//二维数组的第一列
                arr[i][j] = 1;

            if (i == j)//二维数组的对角线
                arr[i][j] = 1;

            if (i >= 2 && j >= 1)//运算
                arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];

                printf("%d", arr[i][j]);
        }
                printf("\n");
    }
  return 0;
}

最后程序运行结果如下图所示:

  这时候我们可以看到数字全部挤在了一起,而且我们要的杨辉三角呈现的效果每行后面都有0,这是因为我们一开始把二维数组初始化成全部为0,所以这里只要我们小小的改动,把 for(j = 0, j < 10, j++)这里面的判断条件改成 j <= i 就好了,

  最后,打印的时候%d前面加上空格,就可以更加美观,最后程序:

  程序运行如下图所示:

  这时候程序就完美的呈现出来了,想要打印几行几列都可以在创建数组的时候随意修改行列数打印杨辉三角。

  最终附上完整修改后的代码:

//1
//1 1
//1 2 1
//1 3 3 1
//1 4 6 4 1
 
#include<stdio.h>

int main()
{
    int arr[10][10] = { 0 };
    int i = 0;
    int j = 0;

    for(i = 0; i < 10; i++)
    {
        for(j = 0; j <= i; j++)
        {
            if (j == 0)//二维数组的第一列
                arr[i][j] = 1;

            if (i == j)//二维数组的对角线
                arr[i][j] = 1;

            if (i >= 2 && j >= 1)//运算
                arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];

                printf(" %d", arr[i][j]);
        }
                printf("\n");
    }
  return 0;
}