#include <stdio.h>
void main()
{
int pascasl[30][30], i, j, num;
// Initliaze the array
for (i = 0; i < 30; i++)
for (j = 0;j < 30; j++)
pascals[i][j] = 0;
do
{
printf("input a number ( 1 <= n <= 30) ==> ");
scanf("%d", &num);
} while (n < 1 || n > 30);
for (i = 0; i < num; i++)
pascals[i][0] = 1;
for (i = 1; i < num; i++)
for (j = 1; j <= i; j++)
pascals[i][j] = pascals[i - 1][j] + pascals[i - 1][j - 1];
for (i = 0; i < num; i++)
{
printf("%*s", (80 - 4 * (i + 2)) / 2, " ");
for (j = 0; j <= i; j++)
printf("%4d", pascals[i][j]);
printf("\n");
}
}
只要知它的規則就很容易囉
以這個程式為例, 陣列的存法如下:
1
1 1
1 2 1
1 3 3 1
...
很容易就看得出來
1
1 1
\ |
1 2 1
\ | \ |
1 3 3 1
程式就是依照這個想法寫出來的
--
※ 發信站: 批踢踢實業坊(ptt.twbbs.org)
◆ From: mikesun.Dorm13.
> -------------------------------------------------------------------------- <
作者: mikesun (幽靈啊...^o^) 看板: C_and_CPP
標題: Re: 巴斯卡三角形..
時間: Wed Jun 2 12:34:36 1999
printf("%*s", (80 - 4 * (i + 2)) / 2, " ");
這行程式大略講解一下
詳細的用法可以看 printf 的 help 裡面, 有關 width 的說明
當有 % 和 * 一起出現的時候, 代表這個變數要重複顯示
所以先傳入"重複的次數", 然後再傳入"重覆的變數"
以此例
%*s
便是要重覆顥示原本 %s 要顥示的東西
原本是要顯示一個"空白字串"
^^^^^^^^特別注意, 不是字元
所以先把要重覆的次數傳回去, ex, i = 0
(80 - 4 * (i + 2)) / 2 = 36
就是要顯示 36 次的 " "
詳細的說說請看 printf help 裡, 有關 width 的說明
--
※ 發信站: 批踢踢實業坊(ptt.twbbs.org)
◆ From: mikesun.Dorm13.