更新时间2018-03-06 21:45:26
普通直角版本:
123456789101112131415161718192021#define N 11#include<stdio.h>void main(){ int i,j,a[N][N]; for(i=1;i<N;i++) { a[i][1]=1; a[i-1][i-1]=1; } a[10][10]=1; for(i=3;i<N;i++) for(j=2;j<=i-1;j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; for(i=1;i<N;i++) { for(j=1;j<=i;j++) printf("%6d",a[i][j]); printf(" "); }}普通等腰版本:
1234567891011121314151617181920212223242526272829303132333435363738394041#include "iostream.h"#include "stdlib.h"int main(){ while(1) { cout<<"输入显示杨辉三角的行数: "; //不要输入太大,int有限制. int i_line; cin>>i_line; cout<<"三角形如下 "; int **p; //建立二维数组 p=new int*[i_line]; //指针分配空间 int i; //循环变量 for (i=0;i<i_line;i++) { p[i]=new int[i+1]; //每一行分配空间 } for (i=0;i<i_line;i++) //生成三角形 { p[i][0]=1; p[i][i]=1; //杨辉三角,每一行第一个、最后一个数是1 if (i>=2) //第三行开始 { for (int j=1;j<i;j++) //第三行开始,迭代 p[i][j]=p[i-1][j-1]+p[i-1][j]; } } for (i=0;i<i_line;i++) { for (int m=0;m<i_line-i-1;m++) cout<<" "; //输出空格 for (int k=0;k<=i;k++) //显示每一行 cout<<p[i][k]<<" "; cout<<" "; } cout<<" "; } cout<<endl; return 0;}递归版:
123456789101112131415161718192021222324#include <stdlib.h> #include <stdio.h>int f(int n){ if(n==1||n==0) return 1; else return f(n-1)*n;}int main() { int i, j,k,n; printf("请输入行数(最好<=13):"); scanf("%d",&n); for (i = 0; i<n; i++) { for(k=(n-i)*2;k>0;k--) printf(" "); for (j=0;j<=i;j++) printf("%4d",(f(i)/f(j)/f(i-j))); printf(" "); } return 0;}LZ你的要求是:利用n!/m!/(n-m)!计算,所以你要的程序是这样的:
123456789101112131415161718192021222324#include <stdlib.h> #include <stdio.h>int f(int n){ if(n==1||n==0) return 1; else return f(n-1)*n;}int main() { int i, j,k,n; printf("请输入行数(最好<=13):"); scanf("%d",&n); for (i = 0; i<n; i++) { for(k=(n-i)*2;k>0;k--) printf(" "); for (j=0;j<=i;j++) printf("%4d",(f(i)/f(j)/f(i-j))); printf(" "); } return 0;}