?
Lv 4
? 發問時間: 電腦與網際網路程式設計 · 1 0 年前

C++程式語言

請問該怎麼寫出帕斯卡三角形呢??

EX:

input(n+1) : 2

__1

_1_1

1_2_1

input(n+1) :3

___1

__1_1

_1_2_1

1_3_3_1

_(space)

已更新項目:

感謝2位用心的解答^^

最佳就交付投票了~~

THX!!

4 個解答

評分
  • 1 0 年前
    最佳解答

    #include <stdio.h>

    #define N 12

    long combi(int n, int r)

    {

    int i;

    long p = 1;

    for(i = 1; i <= r; i++)

    p = p * (n-i+1) / i;

    return p;

    }

    void paint()

    {

    int n, r, t;

    for(n = 0; n <= N; n++)

    {

    for(r = 0; r <= n; r++)

    {

    int i;

    if(r == 0)

    {

    for(i = 0; i <= (N-n); i++)

    {

    printf(" ");

    }

    } else {

    printf(" ");

    }

    printf("%3d", combi(n, r));

    }

    printf("\n");

    }

    }

    int main()

    {

    paint();

    system("pause");

    return 0;

    }

    2008-04-14 01:08:05 補充:

    上面是網路上搜尋到的程式碼 固定是12層

    最上面加

    #include <iostream.h>

    然後只要把呼叫 paint 的地方改成

    int N;

    cin >> N;

    paint(N-1);

    就可以了

    2008-04-14 01:08:52 補充:

    還要記得把

    #define N 12

    這一行刪除掉喔

    參考資料: 知識+, 我, 我
  • ?
    Lv 4
    1 0 年前

    兩位回答者回答的時間很近~

    而我從他們的回答中也分別學到不同東西~

    事實上都頗有幫助~我很難決定~

    "交付投票"這種設定~

    本來就是給發問者在難以抉擇最佳解答時的另一選擇~

    你喜不喜歡這種感覺跟我無關~你的回文也讓我不舒服~!!

  • 嘿嘿
    Lv 4
    1 0 年前

    發問者很怪的邏輯,什麼叫做謝謝兩位的回答,最佳解答交給投票者,很不喜歡回答到這種發問者,看誰幫你第一時間解決問題級正確率,幫助最大的給最佳回答,而不是我已經受到幫助了,最佳回答給別人決定,別人知道誰幫助你最多嗎?不喜歡這種感覺!!

  • 丸子
    Lv 4
    1 0 年前

    //帕斯卡三角形: 公式=nCr = n!/(r!*(n-r)!), n=第幾列, r=第幾個元素, 從第 0 列第 0 各元素開始

    #include < iostream >

    #include < iomanip >

    using namespace std;

    long long int fac(int n)

    {

    long long int sum;

    if (n==0) return 1;

    if (n==1) return 1;

    sum=n*fac(n-1);

    return (sum);

    }

    int main()

    {

    int row,i,j,k;

    cout << "input(n+1): ";

    cin >> row;

    for(i=0;i <= row;i++) { // 列

    for(j=row-i;j >= 0;j--) cout << " "; // 印空白

    for(k=0;k <= i;k++) // 每列第幾個元素

    cout << (long long int)fac(i)/

    ((long long int)fac(k)*(long long int)fac(i-k)) << " ";

    cout << endl;

    }

    }

    這支程式有兩個缺點,

    1. 一是顯示前面的空格部分, 我懶得花時間詳細去計算空格排列,所以第五列之後顯示會比較沒那麼美觀, 你可以自己想想看怎麼做比較美觀.

    2. 大樹運算, 當階乘數變大之後會有turncation error發生的可能性, 我已經使用到long long int來做, 目前測試到15列都正常, 至於到哪一列之後才會葛屁....我也不清楚, 懶得想了...= =", 夜深了, 睡覺去...Orz

    參考資料: no
還有問題?馬上發問,尋求解答。