【C语言】杨辉三角和练习

简介: 【C语言】杨辉三角和练习

前言

🎈大家好,我是何小侠🎈

🍃大家可以叫我小何或者小侠🍃

💐希望能通过写博客加深自己对于学习内容的理解💐

🌸也能帮助更多人理解和学习🌸

君子慎独,不欺暗室。

解释:此两句为现代读者合用。君子在独处时,即使别人看不见、听不见,也要谨慎不苟


    这篇博客我们一起来学习杨辉三角的解题方法,然后再拿出两个相似思路的题目来练习

    杨辉三角🍊

    这道题其实只要点出思路就比较简单了。

    我们将它看成是一个二维数组,那么打印1的位置只有列为0的时候 和 行和列相等的时候,也就是我们说的对角线。

    但是那其他数字该怎么打印呢? 我们可以知道一个规律,

    数组上一行的两个数加起来等于下面一行的那个对应的数,但是是在第三行才有这个规律,那么现在就很简单了。

    int main() {
         int n = 0;
        scanf("%d",&n);
        int arr[30][30] ={0} ;
        int i = 0;
        int j = 0;
        for (i = 0; i < n; i++)
        {
          for (j = 0; j <= i; j++)
          {
           if (i == j || j == 0)
            {
                arr[i][j] = 1;
            }
            if ( i > 1 && j > 0 && j < i )
             {
                arr[i][j] = arr[i-1][j]+arr[i-1][j-1];
             }
             printf("%5d",arr[i][j]);
          }
           printf("\n");
        }
        return 0;
    }

    我们只需要打印一个

    这样的三角形,所以第二层for循环里的 j < i 就行。还要注意的一点是题目中提到的的域宽,要以%5d的形式输出。

    练习:X形图案 🍊

    我们依然讲的清晰一些

    还是一样的规律其实, i==j 的时候,打印星星,i+j == 最大行数时,打印星星。

    int main() {
       int x = 0;
       int i = 0;
       int j = 0; 
       while(~scanf("%d",&x))
       {
         for (i = 0; i < x; i++)
         {
            for(j = 0; j < x; j++)
            {
                if (i == j || i+j == x-1)
                {
                    printf("*");
                }
                else {
                printf(" ");
                }
            }
            printf("\n");
         }
       }
        return 0;
    }

    练习:空心三角形🍊

    其实也很简单

    我们看到

    if (i == j || j == 0)
            {
                arr[i][j] = 1;
            }

    杨辉三角中我们是这样打印1的也就是说和这里打印星星是一样的,
    但是这样还少了最后一行的星星,我们也只需要多加一个条件就行了

    int main() {
        int  n = 0;
        char arr[20][20] = { 0 };
        int i = 0;
        int j = 0;
        while (scanf("%d", &n) == 1) { 
            for (i = 0; i < n; i++)
            {
                for (j = 0; j <= i; j++)
                {
                    if (j == 0 || i == j || i == n - 1)
                    {
                        arr[i][j] = '*';
                    }
                    else {
                        arr[i][j] = ' ';
                    }
                    printf("%c ", arr[i][j]);
                }
                printf("\n");
            }
        }
        return 0;
    }

    总结🍊

    这篇博客写的东西并不是太难,主要是想总结一下这一类的题目,还有其实上面的代码都可以不用数组直接打印,但是我觉得用数组可以更好的理解,完~

    最后如果这篇博客有帮助到你,欢迎点赞关注加收藏

    如果本文有任何错误或者有疑点欢迎在评论区评论


    目录
    相关文章
    |
    6天前
    |
    算法 C语言
    C语言求最大公约数
    C语言求最大公约数
    |
    6天前
    |
    算法 C语言
    C语言判断素数
    C语言判断素数
    19 0
    |
    9月前
    |
    算法 C语言
    C语言杨氏矩阵
    C语言杨氏矩阵
    43 0
    |
    9月前
    |
    存储 C语言
    【C语言练习】杨氏矩阵、杨辉三角
    【C语言练习】杨氏矩阵、杨辉三角
    49 0
    |
    10月前
    |
    C语言
    杨氏矩阵(C语言)
    杨氏矩阵(C语言)
    49 0
    |
    10月前
    |
    C语言
    【C语言】杨辉三角
    【C语言】杨辉三角
    69 0
    |
    11月前
    |
    存储 编译器 Linux
    C语言例题讲解(中)
    C语言例题讲解(中)
    |
    11月前
    |
    C语言
    C语言实现杨辉三角
    C语言实现杨辉三角
    【C语言】求第n个斐波那契数
    斐波那契数:前两个数为1,后面的数为它前两个数之和
    C语言_杨辉三角
    杨辉三角(也称帕斯卡三角)相信很多人都不陌生,它是一个无限对称的数字金字塔,从顶部的单个1开始,下面一行中的每个数字都是上面两个数字的和。
    C语言_杨辉三角