精華區beta C_and_CPP 關於我們 聯絡資訊
#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.