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,...)
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

posted on 2011-04-26 02:53  more think, more gains  阅读(259)  评论(0编辑  收藏  举报

导航