原题链接:蓝桥杯算法提高VIP-Pascal三角
解题思路:
1、每个数等于它上方两数之和。
2、每行数字左右对称,由1开始逐渐变大。
3、第n行的数字有n项。
4、第n行的m个数可表示为 C(n-1,m-1),即为从n-1个不同元素中取m-1个元素的组合数。
5、第n行的第m个数和第n-m+1个数相等 ,为组合数性质之一。
6、每个数字等于上一行的左右两个数字之和。可用此性质写出整个杨辉三角。即第n+1行的第i个数等于第n行的第i-1个数和第i个数之和,这也是组合数的性质之一。即 C(n+1,i)=C(n,i)+C(n,i-1)。
7、(a+b)n的展开式中的各项系数依次对应杨辉三角的第(n+1)行中的每一项。
8、将第2n+1行第1个数,跟第2n+2行第3个数、第2n+3行第5个数……连成一线,这些数的和是第4n+1个斐波那契数;将第2n行第2个数(n>1),跟第2n-1行第4个数、第2n-2行第6个数……这些数之和是第4n-2个斐波那契数。
9、将第n行的各数值,分别乘以10的列数m-1次方,然后把这些数值相加的和等于11的n-1次方。
注意事项:
参考代码:
#include<stdio.h> int c(int x, int y) { int z; if (y == 1 || y == x)return 1; z = c(x - 1, y - 1) + c(x - 1, y); //C(n+1,i)=C(n,i)+C(n,i-1) return z; } int main() { int n; scanf("%d", &n);//输入行数 n += 1; for (int i = 1; i <=n; i++) { for (int i1 = i; i1 < n; i1++) //数字前面的空格,倒三角 printf(" "); for (int j = 1; j <= i; j++) printf("%3d ", c(i, j)); //输出数字时保留间隙 printf("\n"); } return 0; }
0.0分
5 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复