杨辉三角的代码处理

首先,完整代码如下

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

int main()
{
    int arr[10][10] = { 0 };//暂且用10行10列的二维数组来存放,也可以用变量来增加或者减少,在本次程序中则需要input<10
    printf("输想打印的杨辉三角行数:> ");
    int input = 0;//用来接受想打印的杨辉三角行数
    int j = 0;//用来作用行
    int k = 0;//用来做用于列
    scanf("%d", &input);
    

    //先构建整体的框架
    for (j = 0; j < input; j++)
    {
        //每行首尾元素都是1,其余元素依旧为零
        arr[j][0] = 1;
        arr[j][j] = 1;
        //前两行元素为1,直接从第三行开始---当然打印依旧要从头打印
    }

    for ( j = 2; j < input; j++)//控制行数,从第三行开始,但是数组的行下标为2,j = 2
    {
         for ( k = 1; k < j ; k++)//控制列数,从每行第2个开始,即下标为1开始,所以 k = 1
        {
            arr[j][k] = arr[j - 1][k - 1] + arr[j - 1][k];//等于它肩上两数之和
        }
    }

    //打印杨辉三角,重复两个for循环即可
    for (j = 0; j < input; j++)
    {
        //此处用来空格修饰,从直角三角形变成金字塔状
        for (k = 0; k < input - j; k++)
        {
            printf("  ");
        }
        for (k = 0; k <= j; k++)
            printf("%3d ", arr[j][k]);//3d用来修饰相邻元素间的距离,不局限于3,合适即可
            printf("\n");//处理完一行换行继续

    }
    return 0;
}

想要入手这个问题,首先需要知道什么是杨辉三角,它的基础逻辑是什么,一张图来了解

可以采用二维数组来完成杨辉三角的创建,不难看出杨辉三角有首尾元素全为1,其内部元素为上一层相邻两元素之和。

那么我们可以先完成大致框架的构架,内部元素再慢慢填充

//先构建整体的框架
    for (j = 0; j < input; j++)
    {
        //每行首尾元素都是1,其余元素依旧为零
        arr[j][0] = 1;
        arr[j][j] = 1;
        //前两行元素为1,直接从第三行开始---当然打印依旧要从头打印
    }

完成框架的搭设以后,便开始了内部的填充,我们从第三层开始入手,前两层就在基础之中完成。在此刻应当注意杨辉三角的层数和二维数组下标间的差异!!!!

 for ( j = 2; j < input; j++)//控制行数,从第三行开始,但是数组的行下标为2,j = 2
    {
         for ( k = 1; k < j ; k++)//控制列数,从每行第2个开始,即下标为1开始,所以 k = 1
        {
            arr[j][k] = arr[j - 1][k - 1] + arr[j - 1][k];//等于它肩上两数之和
        }
    }

最后便是打印杨辉三角,用简单的两个for循环即可

//打印杨辉三角,重复两个for循环即可
    for (j = 0; j < input; j++)
        for (k = 0; k <= j; k++)
           {
              printf("%3d ", arr[j][k]);//3d用来修饰相邻元素间的距离,不局限于3,合适即可
              printf("\n");//处理完一行换行继续
            }

这样打印出来效果不是很美观

可以增加这样一段代码进行修饰

 //此处用来空格修饰,从直角三角形变成金字塔状
        for (k = 0; k < input - j; k++)
        {
            printf("  ");

这段代码增加前后的效果演示

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值