c++onlinejudge简单问题

来源:百度知道 编辑:UC知道 时间:2024/06/14 06:41:41
输入:
多组测试数据,每行只有一个数n,1<=n<=1000

输出:
计算出1/1 + 2/1 + 3/2 + 5/3 + 8/5 + 13/8 + .....一直到第n项的和,
每项的分子分母是由斐波那契数列中取相邻的两个得到,计算结果保留三位小数

样例输入:
1
2
3
4
10

样例输出:
1.000
3.000
4.500
6.167
15.862

我的解是
#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
int n;
cin>>n;
float a;
float f1=1;
float f2=1;
double sum=0;
for(a=0;a<n;a++)
{
sum+=f1/f2;
f1+=f2;
f2+=a;

}
cout<<setiosflags(ios::fixed)<<setprecision(3)<<sum<<endl;
return 0;

}

为什么4以后的结果都不对了?
比如你输入4 和预期结果不一样。 哪里有问题??

跟a没有关系的同学。
f1+=f2;
f2+=a; 改为:

float temp;
temp=f1;
f1+=f2;
f2=temp;

___________________________________________________________________
#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
int n;
cin>>n;
float a;
float f1=1;
float f2=1;
double sum=0;
for(a=0;a<n;a++)
{
sum+=f1/f2;
float temp;
temp=f1;
f1+=f2;
f2=temp;

}
cout<<setiosflags(ios::fixed)<<setprecision(3)<<sum<<endl;
return 0;

}