D


私信TA

用户名:ALS1111

访问量:22109

签 名:

等  级
排  名 55
经  验 11377
参赛次数 0
文章发表 132
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

解题思路:

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

5 人评分

  评论区

#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;
}
2022-03-15 08:53:13
  • «
  • 1
  • »