题目----杨辉三角形是(a+b)^n展开后各项的系数。如(a+b)^4展开后各项的系数为1,4,6,4,1。
输出杨辉三角形为:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
特点:0列和对角线元素都是1。其他元素均为上一行的同列元素与前一列元素之和。
思路:
①C语言定义二维数组时,它的行数和列数都必须确定。
②怎么可以对0列和对角线元素赋初值???
观察可以发现,第一行1个元素、第二行2个元素、第三行3个元素、第四行4个元素、第五行5个元素
[i][i]了。这样的话就可以给第0列和每一行的最后一列赋初值了。
代码代码代码:
1 #include <stdio.h>
2 #define N 5
3 int main(){
4 int i,j;
5 int str[N][N];
6
7 for(i=0;i<N;i++){
8 str[i][0]=1; /*0列元素置1*/
9 str[i][i]=1; /*对角线元素置1*/
10 for(j=1;j<i;j++){ /*0,1两行不用算*/
11 str[i][j]=str[i-1][j]+str[i-1][j-1];
12 }
13
14 for(j=0;j<=i;j++){ //对数组中的元素遍历输出
15 printf("%d ",str[i][j]);
16 }
17 printf("\n");
18 }
19 }
总结:
通过设置j和i的关系,使得开始从2行开始算
可以算一行之后就把那一行的数据输出出来
再来一种方法:
1 int main(){
2 int i,j;
3 char str[N][N];
4
5 for(i=0;i<N;i++){
6 for(j=0;j<=i;j++){
7
8 if(i==0 || j==0 || i==j){
9 str[i][j]=1;
10 }else{
11 str[i][j]=str[i-1][j]+str[i-1][j-1];
12 }
13 }
14
15 for(j=0;j<=i;j++){
16 printf("%d ",str[i][j]);
17 }
18 printf("\n"); /*每一行输出完后换行*/
19 }
20 }
总结:
第二种不同之处就在于它是通过这个判断条件来为0列和对角线元素赋值的,那么这个判断条件为什么要这么写???
i==0-----把第一行说了
j==0-----把第一列说了
i==j-----把对角线说了
-n²