杨辉三角形的用处与构成
- 11幂次方的值
- 二项式系数
- 相加为2幂次方的值
- 构成为下一行数为上面临近的两个数相加
遇到的问题
- 该使用哪个数组
- 先赋值再输出还是边赋值边赋值
- 如何控制首位均为1
- 如何使输出变得好看
解决问题
- q1:我们考虑一维数组后发现无法实现下一行等于上两行相加,所以运用二维数组会更加便捷
- q2,3:首先我们先考虑先赋值后输出
for(i=0;i<n;i++) { a[i][0]=1; }
首行为一
for(i=1;i<n;i++) { for(j=1;j<=i;j++) { a[i][j]=a[i-1][j]+a[i-1][j-1]; } }
下一行等于上两行相加
#include<stdio.h> int main() { int i,j,n,a[10][10]={0}; printf("请输入一个整数:"); scanf("%d",&n); for(i=0;i<n;i++) { a[i][0]=1; } for(i=1;i<n;i++) { for(j=1;j<=i;j++) { a[i][j]=a[i-1][j]+a[i-1][j-1]; } } for(i=0;i<n;i++) { for(j=n;j>=i+1;j--) { printf(" "); }//这里的j可以重复用内存更小 for(j=0;j<=i;j++) { printf("%-6d ",a[i][j]); } printf("\n"); } return 0; }
特别特别注意的一点就是这里优化循环,只用一个j在两个内循环中可以减小内存,然后我们考虑的是是否可以边赋值边输出
#include<stdio.h> int main() { int i,j,n,a[10][10]={0}; printf("请输入一个整数:"); scanf("%d",&n); for(i=0;i<n;i++) { a[i][0]=1; for(j=0;j<=i;j++) { a[i][j]=a[i-1][j]+a[i-1][j-1]; printf("%d ",a[i][j]); } printf("\n"); } return 0; }
检查j部分,我们必须要使j-1和i-1存在,所以没有办法写在一个程序里面,那样将会使程序变得更复杂
-
q4:这里我也没想明白嘿嘿,是抄的大佬的,最后输出结果如下