解题思路:
①编写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; }
C二级辅导-温度转换 (C语言代码)浏览:2323 |
C语言程序设计教程(第三版)课后习题5.8 (C语言代码)浏览:703 |
大神老白 (C语言代码)浏览:713 |
C语言程序设计教程(第三版)课后习题10.5 (C语言代码)浏览:719 |
C二级辅导-计负均正 (C语言代码)浏览:647 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:635 |
ASCII帮了大忙浏览:748 |
printf基础练习2 (C语言代码)浏览:305 |
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:1030 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:527 |