
c语言:求1!/2!*(2!/4!)*(3!/6!)*...*(n!/2n!)的算法
6个回答
展开全部
观察:
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
展开全部
//#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);
}
#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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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;
}
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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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;
}
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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
规律挺明显的了,分子可以约去,只剩下分母,结果为多少分之一
#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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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);
}
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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |