c语言:求1!/2!*(2!/4!)*(3!/6!)*...*(n!/2n!)的算法

 我来答
孟羽然
2014-03-26 · TA获得超过2977个赞
知道小有建树答主
回答量:1308
采纳率:70%
帮助的人:608万
展开全部

观察:

s(1) => 2

s(2) => 3,4

s(3) => 4,5,6

s(4) => 5,6,7,8

s(5) => 6,7,8,9,10

s(6) => 7,8,9,10,11,12

s(7) => 8,9,10,11,12,13,14

s(8) => 9,10,11,12,13,14,15,16

s(9) => 10,11,12,13,14,15,16,17,18

s(10) => 11,12,13,14,15,16,17,18,19,20

s(11) => 12,13,14,15,16,17,18,19,20,21,22


可知从2到2n出现测次数分别为:

1 1 2 2 3 3 4 4 5 5 6 5 5 4 4 3 3 2 2 1 1


所以算法为:

def s(n):
    i = 2 
    j = n * 2 
    c = 1.0 
    r = 1 
    while i < j:
        tmp = i * j 
        for k in range(0, int(c)):
            r /= tmp 
        c += 0.5 
        i += 1
        j -= 1
    if i == j:
        for k in range(0, int(c+0.5)):
            r /= i
    return r
White_MouseYBZ
2014-03-26 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:7211万
展开全部
//#include "stdafx.h"//vc++6.0加上这一行.
#include "stdio.h"
void main(void){
int i,j,k,n,m;
double sum;
printf("Input n...\nn=");
scanf("%d",&n);
for(m=(n<<1)+1,sum=1.0,i=2;i<m;i+=2)
for(k=i>>1,j=i;j>k;sum/=j--);
printf("%e\n",sum);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友84f53f9
2014-03-26 · 超过13用户采纳过TA的回答
知道答主
回答量:49
采纳率:0%
帮助的人:33.8万
展开全部
#include<stdio.h>

double f1(int n)
{

//计算n的阶乘
double f;
if(n==0)
f=1;
else if(n==1)
f=1;
else
f = f1(n-1)*n;
return f;
}

double f2(int n)
{
//计算2n的阶乘

return f1(2*n);

}

int main()
{
printf("please input n:");

int n;
double f;

scanf("%d",&n);

f= f1(n)/f2(n);

printf("%f",f);

system("pause");
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
benben王胜
2014-03-26 · 超过27用户采纳过TA的回答
知道答主
回答量:73
采纳率:0%
帮助的人:64.2万
展开全部
#include<stdio.h>
double f1(int n)
{
double f;
if(n==0) f=1;
else if(n==1) f=1;
else
f = f1(n-1)*n;
return f; }
double f2(int n) {
return f1(2*n); }
int main()
{ printf("please input n:");
int n; double f;
scanf("%d",&n);
for(int i=1;i<=n;i++)
f*= f1(n)/f2(n); //循环n次,相乘喃。
printf("%f",f);
system("pause");
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Rankabc
2014-03-26 · TA获得超过3561个赞
知道大有可为答主
回答量:3705
采纳率:59%
帮助的人:1143万
展开全部
规律挺明显的了,分子可以约去,只剩下分母,结果为多少分之一
#include<stdio.h>
int fun(int n)
{
int i,s=1;
for(i=2*n;i>n;i--)
s*=i;
return s;
}
int main() 
{
int i,n,s=1;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
s*=fun(i);   
}
printf("1/%d=%.2lf\n",s,1.0/s);
    return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
乾坤毒王
2014-03-26 · TA获得超过148个赞
知道小有建树答主
回答量:134
采纳率:0%
帮助的人:110万
展开全部
#include <stdio.h>
long fact(int n)
{
long s;
if(n<=1)
s=1;
else
s=n*fact(n-1);
return s;
}
void main()
{ int i,n;
int fenzi,fenmu;
double zhi;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
if(i==1){
fenzi=fact(1);
fenmu=fact(2);
}
else {
fenzi=fenzi*fact(n);
fenmu=fenmu*fact(2*n);
}}
zhi=fenzi/(double)fenmu;
printf("%d\n",fenzi);
printf("%d\n",fenmu);
printf("%f\n",zhi);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式