谭浩强C程序设计习题6-6思考

  题目:输出以下的杨辉三角形(要求输出10行)。

1

1  1

1  2  1

1  3  3  1

1  4  6  4  1

1  5  10 10  5  1

..  ..  ..  ..  ..  ..

观察该数列,可以发现三个特征:①每一行的第一个元素是1;②每一行的最后一个元素是1;③中间的元素是其正上方和左上方元素之和。根据这些特征可以求得N行的杨辉三角形。代码如下:

 1 #include<stdio.h>
 2 #define N 10
 3 
 4 int main()
 5 {
 6     void yang_hui();                  //声明杨辉函数
 7     yang_hui();                       //调用此函数
 8     return 0;
 9 }
10 
11 void yang_hui()                       //函数定义
12 {
13     int yh[N][N] = { 0 };            //杨辉三角形以一个二维数组存放
14     for(int i = 0; i<N; i++)
15         for (int j = 0; j <= i; j++) //i==j之后的元素默认为 0 ,不处理
16         {
17             if (j == 0) yh[i][j] = 1;//每行第一个元素是 1
18             else if (i == j) yh[i][j] = 1;//每行最后一个元素是 1
19             else
20             {
21                 yh[i][j] = yh[i - 1][j - 1] + yh[i - 1][j];//其他的元素是其正上方和左上方元素之和
22             }
23         }
24     /*输出杨辉三角形*/
25     for (int i = 0; i < N; i++)
26     {
27         printf("\n");
28         for (int j = 0; j <= i; j++)
29         {
30             printf("%d\t", yh[i][j]);
31         }
32     }
33 }

  学习辅导的参考答案和我这的思路是一样的,附上参考代码:

 1 #include<stdio.h>
 2 #define N 10
 3 int main()
 4 {
 5     int i, j, a[N][N];          //数组为10行10列
 6     for (i = 0; i < N; i++)
 7     {
 8         a[i][i] = 1;            //使对角线元素的值为1
 9         a[i][0] = 1;            //是第一列元素的值为1
10     }
11     for (i = 2; i < N; i++)        //从第3行开始处理
12         for (j = 1; j <= i - 1; j++)
13             a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
14     for (i = 0; i < N; i++)
15     {
16         for (j = 0; j <= i; j++)
17             printf("%6d", a[i][j]);//输出数组各元素的值
18         printf("\n");
19     }
20     printf("\n");
21     return 0;
22 }
扫描二维码关注公众号,回复: 11225504 查看本文章

猜你喜欢

转载自www.cnblogs.com/teamcolt/p/12927210.html