标准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;
}

点赞