hdu 1023Train Problem II 卡特兰数

卡特兰数的应用。。。提交后presentation error.........看了下题目没有什么特殊格式要处理的啊,后来把puts(" ");换成printf("\n");就过了。

我就纳闷了,原来我puts(""),引号里面多了一个空格。。。。。。以后一定要小心。

模版如下:

卡特兰数公式如下:

原理

令h(1)=1,h(0)=1,catalan数满足递归式:
h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0) (其中n>=2)
另类递归式:
h(n)=((4*n-2)/(n+1))*h(n-1);
该递推关系的解为:
h(n)=C(2n,n)/(n+1) (n=1,2,3,...)
ContractedBlock.gif ExpandedBlockStart.gif View Code
 
   
1 #include < stdio.h >
2 #include < stdlib.h >
3 #include < string .h >
4   int main( )
5 {
6 int r[ 60 ],n,i,j,k,t,c;
7 while (scanf( " %d " , & n) != EOF)
8 {
9 for (i = 1 ;i < 60 ;i ++ )
10 r[i] = 0 ;r[ 0 ] = j = 1 ;
11 for (i = 2 ;i <= n; ++ i)
12 {
13 for (k = 0 ;k < j; ++ k) // 大数乘法,从低位到高位
14   r[k] *= ( 4 * i - 2 ); // 乘法处理进位,c是进位值
15   for (k = c = 0 ;k < j; ++ k)
16 {
17 t = r[k] + c;
18 r[k] = t % 10 ; // 对乘法结果处理进位
19   c = t / 10 ;
20 }
21 while (c)
22 { // 乘法最高进位
23   r[j] = c % 10 ;
24 c /= 10 ;
25 ++ j;
26 }
27 for (k = j - 1 ,c = 0 ;k >= 0 ; -- k) // 大数除法,从高位到低位
28   {
29 t = c * 10 + r[k];
30 r[k] = t / (i + 1 );
31 c = t % (i + 1 );
32 }
33 while ( ! r[j - 1 ])
34 -- j; // 除法最高位
35   }
36 for (i = j - 1 ;i >= 0 ;i -- )
37 printf( " %d " ,r[i]);
38 printf( " \n " );
39
40 }
41 return 0 ;
42 }
43
44

转载于:https://www.cnblogs.com/tangcong/archive/2011/04/26/2028844.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值