杨辉三角问题

2019-04-29   22:34:40 

问题描述:打印出如图所示三角形(打印十行)

中间的数据等于其上一行左上,右上的数据和,第i层有i列需要求解i个数据,可以用二维数组存储杨辉三角形。规律:第一列都为1,主对角线都为1,从第三行起,中间位置元素的值等于其上一行对应位置元素及其前一个元素之和,值就是从当前推到到下一行的递推式,从此可求出杨辉三角行的任意一行。

#include<stdio.h>
void yanghui(){
    int n,i,j,a[20];
    printf(" 1
");
    a[1]=a[2]=1;
    printf(" %-4d %-4d
",a[1],a[2]);    //%-4d使输出空出4位来,-指左对齐
    for(i=3;i<=10;i++)
    {
        a[1]=a[i]=1;
        for(j=i-1;j>1;j--)
        {
        
        a[j]=a[j]+a[j-1];
        for(j=1;j<=i;j++)
        printf(" %-4d",a[j]);
       }
        printf("
");
      
    }
    
} 
int  main()
{
yanghui();
}

这个代码的运行只体现了思想,并没有按照正三角形的形式输出。

改进版:

#include <stdio.h>
#define N 10 
int main()
{ 
    int arr[N][N] = {0};
    int i=0;    
    for(i = 0; i<N; i++)
    {    
        int m = 0;      //定义m,使其输出空格,直角三角形变为正三角形 
        for(m = 0;m<N-i;m++)
        {
            printf(" ");
        }
        int j=0;
         for(j = 0;j<=i; j++)           //i=0,j=0,j<=i,所以执行内层for循环,j=0或者i=j,a[i][j]=1,即a[0][0]=1。j++后j为1,跳出内层循环。
          {                              i=1,j=0,a[1][0]=1;a[1]a[1]=1;跳出循环;
           if((0 == j)||(i == j))        i=2,j=0,a[2][0]=1;a[2][1]=a[1][1]+a[2][0]=1+1=2;a[2][2]=1;(i=j的情况)
            {            
               arr[i][j] = 1;             
            }    
            else
                {
                        
                    arr[i][j] = arr[i-1][j] + arr[i-1][j-1];
                }        
            printf("%4d",arr[i][j]);                   //规定好距离,若为1,2,3下层数据会混合在一起,不易区分。
        }    
        printf("
");
    }
    return 0;
}

原文地址:https://www.cnblogs.com/laurarararararara/p/10793451.html