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) 编辑 收藏 举报