標準2 維表問題

 標準2 維表問題 
    ´問題描述: 
      n 是一個正整數。2n 的標準2 維表是由正整數 1,2 ,…,2n 組成的2n 數組,該 
數組的每行從左到右遞增,每列從上到下遞增。2n 的標準2 維表全體記爲Tab(n) 。例如, 
當n=3 時Tab(3)如下: 
             1  2  3    1  2  4    1  2  5     1  3  4    1  3  5 
             4  5  6    3  5  6    3  4  6     2  5  6    2  4  6 


    ´編程任務: 
    給定正整數n,計算Tab(n) 中2n 的標準2 維表的個數。 
    ´數據輸入: 
    給出輸入數據。第一行有1 個正整數n 。 
    ´結果輸出: 
    將計算出的Tab(n) 中2n 的標準2 維表的個數輸出到文件output.txt 。 
            輸入示例                      輸出示例       
               3                                            5 
此問題是求Catalan數問題 代碼如下:
//此題的答案其實就是Catalan數,因爲數字很大所以關鍵是要用到大數相乘的方法
#include<stdio.h>
int a[101][101] = {0};
int main()
{
        int n,i,j,len,r,temp,t;
        int b[101];
        a[1][0] = 1; // 低座標存放大數的低位
        len = 1;
        b[1] = 1;
        for (i = 2; i <= 100; i++)
        {
                t = i - 1;
             for (j=0;j<len;j++) // 模擬乘法,從低位開始

     {
        a[i][j] = a[i-1][j] * (4 * t + 2);
     }
                for (r = j = 0; j < len; j++) // 處理相乘結果
                {
                        temp = a[i][j] + r;
                        a[i][j] = temp % 10;
                        r = temp / 10;
                }
                while (r) // 進位處理

                {
                        a[i][len++] = r % 10;
                        r /= 10;
                }
                for (j = len-1, r = 0; j >= 0; j--) // 模擬除法,從高位開始
                {
                        temp = r * 10 + a[i][j];
                        a[i][j] = temp / (t+2);
                        r = temp % (t+2);
                }
             while (!a[i][len-1]) // 高位零處理
     {
        len--;
     }
                b[i] = len; // 記錄結果的長度
        }
        while (scanf("%d",&n))
        {        
                for(j = b[n] - 1; j >= 0; j--)
     {
        printf("%d",a[n][j]);
     }
                printf("\n");
        }
        return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章