题目:
本题要求编写程序,计算序列 2/1+3/2+5/3+8/5+... 的前N项之和。注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。
输入格式:
输入在一行中给出一个正整数N。
输出格式:
在一行中输出部分和的值,精确到小数点后两位。题目保证计算结果不超过双精度范围。
样例">样例">样例">输入样例:
20
输出样例:
32.66
代码其一:
标准for循环写的,简单小巧,惹人喜爱。
#include<stdio.h>
int main()
{
int n,m;
double a=2,b=1,t;
double ans=0.0,flag;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
ans+=a/b;
t=a;
a=a+b;
b=t;
}
printf("%.2lf",ans);
return 0;
}
代码其二:
递归写的,当时是想练一下手,改了好长时间,成功了,我认为的要点:double型和double型四则运算,最好全部设成同一种类型。
用过了(double)强制转化,答案和ac代码完全相同,我试到了n=33333,都一毛一样但系统不给过,只能说pta太严了。。。。
#include<stdio.h>
#include<math.h>
double n,m,flag;
double ans=0;
void dai(double a,double b,double mm)
{
if(mm==n)
{
ans+=a/b;
return;
}
ans+=a/b;
dai(a+b,a,mm+1);
}
int main()
{
double tt;
scanf("%lf",&n);
dai(2,1,1);
printf("%.2f",ans);
return 0;
}
下雨了,抱怨一下。