如何用C語言列印完美地楊輝三角
阿新 • • 發佈:2018-11-17
最近很煩,寫點這種有意思的小程式碼娛樂一下。哈哈。
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; }
最後簡要地說一下主要的思想,其實程式碼很簡單,用一個一維陣列 來對映一個二維陣列,列印本層結束後,傳入下層的起點和終點,為本層元素賦值時候要注意有沒有訪問越界。