【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;
    }
    

    总结🍊

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

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

    在这里插入图片描述在这里插入图片描述
    如果本文有任何错误或者有疑点欢迎在评论区评论
    在这里插入图片描述

    在这里插入图片描述

    • 11
      点赞
    • 5
      收藏
      觉得还不错? 一键收藏
    • 打赏
      打赏
    • 1
      评论
    评论 1
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    打赏作者

    He XIAO xia

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

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

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

    打赏作者

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

    抵扣说明:

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

    余额充值