[西门子] 2023年12月23日,每天花费一分钟练习C语言:用C语言写出杨辉三角的第n行,只需

[复制链接]
查看189 | 回复0 | 2024-6-28 07:57:51 | 显示全部楼层 |阅读模式
>学习工控知识,就来工控小新


农历十一月十一日   2023/12/ 23


往期推荐
2023年12月21日,每天花费一分钟练习C语言:看看你能否用递归和非递归的方式实现1+2+3+…+n的运算

2023年12月22日,每天花费一分钟练习C语言:十万以内阶乘和数的秘密,只有5个数字知道!





/ Daily Exercises
题目:
给定一个非负索引rowindex,返回杨辉三角的第rowindex行。


题目分析
杨辉三角是一种由二项式系数构成的三角形,其性质在组合数学中具有重要的作用。它是以明朝数学家杨辉的名字命名的,也被称为帕斯卡三角形。

要解决这个题目,我们需要分析以下几个方面:
输入和输出:题目要求我们输入一个非负索引rowindex,输出一个一维数组,表示杨辉三角的第rowindex行。例如,如果输入是3,那么输出应该是[1,3, 3, 1]。
为了解决这个问题,我们需要先了解杨辉三角的规律,然后用C语言实现一个函数,根据给定的索引返回对应的行。具体的分析过程和编程程序如下:
杨辉三角的规律有以下几点:

  • 1、每一行的数字都是从1开始递增,然后递减,对称排列。


  • 2、每一行的第一个数和最后一个数都是1。


  • 3、除了第一行和第二行,每一行的第n个数等于上一行的第n-1个数和第n个数之和,即a[j]     = a[i-1][j-1] + a[i-1][j]。


  • 4、每一行的数字都是组合数,即第n行的第k个数等于n-1个数中取k-1个数的组合数,即a[j]     = C(i-1, j-1)。


根据这些规律,我们可以用C语言实现一个函数,输入一个非负整数rowindex,返回一个一维数组,表示杨辉三角的第rowindex行。我们可以用一个二维数组来存储杨辉三角的每一行,然后用一个循环来计算每一行的数字,最后返回指定的行。


程序展示




































































#include <stdio.h>#include <stdlib.h>
//定义一个函数,输入一个非负整数rowindex,返回一个一维数组,表示杨辉三角的第rowindex行int* getRow(int rowindex){    //定义一个二维数组,用来存储杨辉三角的每一行    int** triangle = (int**)malloc(sizeof(int*) * (rowindex + 1));    //定义一个变量,用来记录每一行的长度    int len;    //定义一个循环变量,用来遍历每一行    int i;    //定义一个循环变量,用来遍历每一行的每一个元素    int j;    //用一个循环来计算每一行的数字    for(i = 0; i <= rowindex; i++)  {        //计算每一行的长度,等于行数加一        len = i + 1;        //为每一行分配内存空间,大小为长度乘以整数的字节数        triangle = (int*)malloc(sizeof(int) * len);        //每一行的第一个数和最后一个数都是1        triangle[0] = 1;        triangle[len - 1] = 1;        //用一个循环来计算每一行的中间元素,从第二个元素开始,到倒数第二个元素结束        for(j = 1; j < len - 1; j++)    {            //每一行的第j个数等于上一行的第j-1个数和第j个数之和            triangle[j] = triangle[i-1][j-1] + triangle[i-1][j];        }    }    //返回指定的行    return triangle[rowindex];}
//定义一个主函数,用来测试int main(){    //定义一个变量,用来存储输入的索引    int index;    //定义一个变量,用来存储返回的数组    int* row;    //定义一个变量,用来记录返回的数组的长度    int length;    //定义一个循环变量,用来遍历返回的数组    int i;    //提示用户输入一个非负整数    printf("请输入一个非负整数:\n");    //从标准输入读取一个整数,赋值给index    scanf("%d", &index);    //调用函数,传入index,返回一个数组,赋值给row    row = getRow(index);    //计算返回的数组的长度,等于索引加一    length = index + 1;    //打印返回的数组    printf("杨辉三角的第%d行是:\n", index);    for(i = 0; i < length; i++)  {        printf("%d ", row);    }    printf("\n");    //释放内存空间    free(row);    //返回0,表示程序正常结束    return 0;}


程序测试

这个程序可以在VC6.0的环境下运行,也可以在其他的C语言编译器上运行。为了验证程序的正确性,我们可以输入一些测试用例,比如0,1,2,3等,观察输出的结果是否符合预期。下面是一些测试用例的运行结果:






源代码获取
#软件下载通道#



我用夸克网盘分享了「20231223」,点击链接即可保存。打开「夸克APP」,无需下载在线播放视频,畅享原画5倍速,支持电视投屏。
链接:https://pan.quark.cn/s/65a35345aa1b
(链接和提取码建议复制粘贴,手动输入容易出现错误)
#支持一下#
分享整理,测试发布不易 如果您方便的话可以帮忙点一下↓↓
谢谢大家!







下期题目


给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值,如果给出数组元素个数小于2,则返回0









点赞加关注,学习不迷路
微信公众号|工控小新
EPLAN电气绘图、TIA博图基础 、CAD、C语言教学、单片机基础、三菱PLC ... 每日持续更新中


发现“分享”“赞”了吗,戳我看看吧


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则