1、 杨辉三角形的每一项数据正好是组合 (即n!⼀m!⼀(n-m)!)的值,其中n是行数(从0行开始);m是列数(

2024-12-20 20:21:40
推荐回答(2个)
回答1:

普通直角版本:

#define N 11
#include
void main()
{
    int i,j,a[N][N];
    for(i=1;i    {
        a[i][1]=1;
        a[i-1][i-1]=1;
    }
    a[10][10]=1;
    for(i=3;i        for(j=2;j<=i-1;j++)
            a[i][j]=a[i-1][j-1]+a[i-1][j];
    for(i=1;i    {
        for(j=1;j<=i;j++)
            printf("%6d",a[i][j]);
        printf("\n");
    }
}

普通等腰版本:

#include "iostream.h"
#include "stdlib.h"
int main()
{
 while(1)
 {
  cout<<"输入显示杨辉三角的行数:\n";  //不要输入太大,int有限制.
  int i_line;
  cin>>i_line;
  cout<<"三角形如下\n";
  int **p;                          //建立二维数组
  p=new int*[i_line];  //指针分配空间
  int i;          //循环变量
  for (i=0;i  {
   p[i]=new int[i+1];          //每一行分配空间 
  }
  for (i=0;i  {
   p[i][0]=1;
   p[i][i]=1;               //杨辉三角,每一行第一个、最后一个数是1
   if (i>=2)       //第三行开始
   {
    for (int j=1;j     p[i][j]=p[i-1][j-1]+p[i-1][j];
   }
  }
  for (i=0;i  {
   for (int m=0;m    cout<<" ";  //输出空格
   for (int k=0;k<=i;k++)  //显示每一行
    cout<   cout<<"\n";
  }
  cout<<"\n";
 }
                                                                
 cout< return 0;
}

递归版:

#include  
#include
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 { 
  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("\n"); 
 } 
return 0;
}

LZ你的要求是:利用n!/m!/(n-m)!计算,所以你要的程序是这样的:

#include  
#include
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 { 
  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("\n"); 
 } 
return 0;
}

回答2:

源代码
#include"stdio.h"
void main()
{
int i,j,n,a[20][20];
printf("请输入要排列的行数:\n");
scanf("%d",&n);
for(i=0;i{
a[i][0]=1;
a[i][i]=1;
}
for(i=2;ifor(j=1;j a[i][j]=a[i-1][j-1]+a[i-1][j];
printf("排列好的数字为:\n");
for(i=0;i{
for(j=0;j<=i;j++)
printf("%5d",a[i][j]);
printf("\n");
}
}
望楼主看在俺是沙发的份上给个采纳。。。