解题思路:

①编写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.0分

4 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 1 条评论

Allen 2年前 回复TA
#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;
}