1. 程式人生 > >如何用C語言列印完美地楊輝三角

如何用C語言列印完美地楊輝三角

最近很煩,寫點這種有意思的小程式碼娛樂一下。哈哈。

5層:

10層:

20層:

#include <stdio.h>
#include <stdlib.h>
static int *temp;                                     //用一個一維陣列來對映二維陣列

void print_line()                                     //列印分割線
{
    printf("\n\n----------------------------------------------------------------------------------------------\n\n");
}

int sum(int n)
{
    int i;
    int sum=0;

    for(i=1;i<=n;i++)
        sum+=i;

    return sum;
}

int check(int begin,int end,int x,int y)                         //判斷是否越界
{
    int flag=1;

    if(begin<=0||end<=0)
        flag=0;
    if(x<begin||y>end)
        flag=0;

    return flag;
}
void print(int begin,int end,int len,int max)                                     //列印楊輝三角
{
    int i;
    int length=end-begin+1;                                                   //本層的長度
    int before_begin=begin-(length-1);                                        //上層的起點                    
    int before_end=before_begin+length-2;                                     //上層的終點                                             

    if(begin<max)
    {
        for(i=begin;i<=end;i++)
        {
            if(check(before_begin,before_end,i-length,i-length+1))
                temp[i]=temp[i-(length)]+temp[i-(length)+1];
            else
                temp[i]=1;
        }
        for(i=0;i<=len;i++)                                               //列印空格,使得列印的楊輝三角更像一個三角形
            printf("   ");
        for(i=begin;i<=end;i++)
            printf("%6d",temp[i]);
        printf("\n\n");
        print(end+1,end+1+length,len-1,max);
    }
}

void test()
{
    int n;
    int max;
    int len;

    print_line();
    printf("輸入列印楊輝三角的層數:");
    scanf("%d",&n);
    max=sum(n);
    len=n;

    temp=(int*)malloc(sizeof(int)*(max+1));
    print_line();
    print(1,1,len,max);
}

int main()
{
    test();

    return 0;
}

最後簡要地說一下主要的思想,其實程式碼很簡單,用一個一維陣列 來對映一個二維陣列,列印本層結束後,傳入下層的起點和終點,為本層元素賦值時候要注意有沒有訪問越界。