• P5732 杨辉三角


    P5732 杨辉三角

    题目描述:给出 n(n≤20),输出杨辉三角的前n行。

    杨辉三角是一种神奇的三角形,它把二项式系数图形化,把组合数内在的一些代数性质直观地从图形中体现出来,是一种离散型的数与形的结合。
    杨辉三角前6行样例为:
    1
    1 1
    1 2 1
    1 3 3 1
    1 4 6 4 1
    1 5 10 10 5 1
    我们不难发现,每一项都等于它上方和左上方项数之和。
    由此我们便可以写出杨辉三角的通项公式:
    a[i][j]=a[i-1][j-1]+a[i-1][j]
    于是我们便能写出代码:

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int n,a[25][25];
    int main()
    {
        scanf("%d",&n);
        a[1][1]=1;a[2][1]=1;a[2][2]=1;a[3][1]=1;a[3][2]=2;a[3][3]=1; //给前几项赋值
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {    
                a[i][j]=a[i-1][j-1]+a[i-1][j];
            }
        }  
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=i;j++)  
    { cout
    <<a[i][j]<<" "; if(i==j) //判断换行 { cout<<endl; } } } return 0; }

    然而运行结果却不尽如人意,并没有得到杨辉三角,反而出现了许多很大的数。很明显,程序需要改进。

    我们再看一下杨辉三角。我们可以发现,它的第一列和每行最后一项都为“1”,即:

    if(j==1)
    {
           a[i][j]=1;
    }  
    if(i==j)
    {
            a[i][j]=1;
    }  

    故程序可以升级为:

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int n,a[25][25];
    int main()
    {
        scanf("%d",&n);
        a[1][1]=1;a[2][1]=1;a[2][2]=1;a[3][1]=1;a[3][2]=2;a[3][3]=1;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {    
                a[i][j]=a[i-1][j-1]+a[i-1][j];
                  if(j==1)  //处理第一列
                 {
                     a[i][j]=1;
                }  
                 if(i==j)  //处理每行最后一个
                 {
                      a[i][j]=1;
                }  
            }
        }  
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=i;j++)
            {
                cout<<a[i][j]<<" ";
                if(i==j)
                {
                     cout<<endl;
                }  
            }
        }  
        return 0;
    }

    此时运行就没问题了,可以AC。

    杨辉三角还有其他性质,比如将每一项都模2,就有:

                  1

                1 1

              1 0 1

            1 1 1 1

          1 0 0 0 1

        1 1 0 0 1 1

      1 0 1 0 1 0 1

    1 1 1 1 1 1 1 1

    此时杨辉三角成了只由“0”、“1”组成的三角。

    
    
  • 相关阅读:
    一道leetcode题的收获如何比较字符串的大小重写sort中的compare[](string &s,string &t){return s+t>t+s};
    unsigned int表示负数问题
    fork()和printf()几点注意细节
    32位机中数据问题
    C++隐藏机制
    ||,&&,++i解答
    enum忽略知识点
    硬链接与软链接
    20145215实验五 Java网络编程及安全
    证书与keytool
  • 原文地址:https://www.cnblogs.com/Na2S2O3/p/13339023.html
Copyright © 2020-2023  润新知