almost 3 years ago

輸入一個整數 n (0 < n < 100),輸出帕斯卡三角形。
依序輸出每一行的值並以空白隔開,最後必須換行。

Sample Input:

4

Sample Output:

1
1 1
1 2 1
1 3 3 1

由於題目要求的n範圍使用32位元的整數都是不夠用的,為了讓n到99時仍是正確的數值,必須使用uint64_t
原本想偷懶用double,因double只有52位元mantissa,雖然這次ITSA連線測試題目測資沒有遇到問題,但超過16位數一定吃土(見下圖右),用uint64_t的話就有滿滿的64位可充分使用,n輸入99都沒問題(下圖左)。

pascal.c
#include <stdio.h>
#include <inttypes.h>

int main()
{
    int n, i, j;
    uint64_t pascal[100] = {0, 1, 0};
    scanf("%d", &n);
    for (i = 1; i <= n; i++)
    {
        for (j = i; j >= 1; j--)
            pascal[j] = pascal[j - 1] + pascal[j];
        for (j = 1; j <= i - 1; j++)
            printf("%" PRIu64 " ", pascal[j]);
        printf("%" PRIu64 "\n", pascal[j]);
    }
    return 0;
}

Reference:

← 歡慶楓之谷新的世代 GirlScreen 螢幕鎖定 →
 
comments powered by Disqus