lqb 基础练习 杨辉三角形

基础练习 杨辉三角形  

时间限制:1.0s   内存限制:256.0MB
   
问题描述

杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。

  

它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。

  

下面给出了杨辉三角形的前4行:

  

   1

  

  1 1

  

 1 2 1

  

1 3 3 1

  

给出n,输出它的前n行。

输入格式

输入包含一个数n。

输出格式
输出杨辉三角形的前n行。每一行从这一行的第一个数开始依次输出,中间使用一个空格分隔。请不要在前面输出多余的空格。
样例输入
4
样例输出
1
1 1
1 2 1
1 3 3 1
数据规模与约定
1 <= n <= 34。
 
分析:
  杨辉三角形的实现可以通过循环打表的方式实现
  再循环输出
 
核心代码:
  
 1 // 初始化
 2 for(int i = 1; i <= n; ++ i)
 3     A[i][1] = A[i][i] = 1;
 4 
 5 // 打表
 6 for(int i = 3; i <= n; ++ i)
 7 {
 8     for (int j = 2; j < i; ++ j)
 9     {
10         A[i][j] = A[i - 1][j] + A[i - 1][j - 1];
11     }
12 }
13 // 循环输出
14 for(int i = 1; i <= n; ++ i)
15 {
16     for(int j = 1; j < i; ++ j)
17         printf ("%d ", A[i][j]);
18     printf("1\n");
19 }

C/C++代码实现(AC):

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstring>
 4 #include <cstdio>
 5 #include <cmath>
 6 #include <stack>
 7 #include <map>
 8 #include <queue>
 9 
10 using namespace std;
11 int A[36][36];
12 
13 void init(int n)
14 {
15     for(int i = 1; i <= n; ++ i)
16         A[i][1] = A[i][i] = 1;
17 }
18 
19 void solve(int n)
20 {
21     for(int i = 3; i <= n; ++ i)
22     {
23         for(int j = 2; j < i; ++ j)
24         {
25             A[i][j] = A[i-1][j] + A[i-1][j-1];
26         }
27     }
28     for(int i = 1; i <= n; ++ i)
29     {
30         for(int j = 1; j < i; ++ j)
31             printf("%d ", A[i][j]);
32         printf("1\n");
33     }
34     return ;
35 }
36 
37 int main()
38 {
39     int n;
40     scanf("%d", &n);
41     init(n);
42     solve(n);
43     return 0;
44 }

猜你喜欢

转载自www.cnblogs.com/GetcharZp/p/9034184.html
今日推荐