原题链接:蓝桥杯算法提高VIP-Pascal三角
解题思路:
①编写C(n,k)函数,并不难,这里不再赘述
②编写生成Pascal三角的函数,按照格式输出即可
注意事项:
本题最难的部份应该就是格式输出问题
主要有两个格式问题
①每行中第一个输出的1前面有多少空格
②每行中除了第一个输出1之外的数的格式控制
解决:
①观察规律可发现,每行的第一个输出1前面的空格有(3*n+2 - i*3)个(n为阶数,i为行数)
②观察规律发现,每行中除了第一个输出1之外的数一共占据6个宽度,用format控制"{:>6}".format(Cnk(i,j))
参考代码:
def Cnk(n,k):                                                #编写C(n,k)函数  
    num = 1  
    for i in range(0,k):  
        num = num*((n-i)/(i+1))     
  
    return round(num)  
  
def Pascal(n):  
    print('{}{}'.format(' '*(3*n+2),1))               #首先输出第0行  
  
    for i in range(1,n+1):  
        for j in range(i+1):  
            if j == 0:  
                print('{}{}'.format(' '*(3*n+2 - i*3),1),end = '')         #控制每行第一个输出1的格式  
            else:  
                print("{:>6}".format(Cnk(i,j)),end = '')                    #控制每行其他输出的数的格式  
  
        print()  
  
  
if __name__ == '__main__':  
    n = int(input())  
    Pascal(n)0.0分
4 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
 
#include <bits/stdc++.h> using namespace std; int f[10000],tx[10000]; int main(){ //滚动数组思想 int n; cin>>n; f[1]=1; for(int i=1;i<=n+1;i++){ for(int k=0;k<=n-i;k++){ cout<<" "; } for(int j=1;j<=i;j++){ cout<<std::right<<setw(3)<<f[j-1]+f[j]<<" "; tx[j]=f[j-1]+f[j]; } memcpy(f,tx,sizeof(tx));; cout<<endl; } return 0; }