题解(首发!!)
2026-04-07 21:21:15
发布于:辽宁
3阅读
0回复
0点赞
(作者是利用AC助手解出的题,内容可能比较相似,致歉)
这个题目描述你可能没看懂,其实它是这样的:
有一个分数序列 ,,,,, ,其中,,,。比如这个序列前6项分别是,,,,,。求这个分数序列的前n项之和。
我们把排列一下,就像这样:
| 1 | 2 | 1 |
| 2 | 3 | 2 |
| 3 | 5 | 3 |
| 4 | 8 | 5 |
| 5 | 13 | 8 |
然而,斐波那契数列是这样的:
可以发现,相当于从第三个项开始的斐波那契数列,相当于从第二个项开始的斐波那契数列。
那就能求出前30个和了。
//求前30个q[i]和p[i],感兴趣可以看一下
#include<bits/stdc++.h>
using namespace std;
void a()
{
int q[31],p[31];
q[1]=2,q[2]=3,p[1]=1,p[2]=2;
cout<<q[1]<<" "<<p[1]<<"\n"<<q[2]<<" "<<p[2]<<"\n";
for(int i=3;i<=30;i++)
{
q[i]=q[i-2]+q[i-1];
p[i]=p[i-2]+p[i-1];
cout<<q[i]<<" "<<p[i]<<"\n";
}
}
int main()
{
a();
}
所以呢,用for循环(1~n)累加即可
综上所述,AC代码如下:(由于本人懒得代,直接枚举了)(如果想代上面代码,建议int换double)
#include<bits/stdc++.h>
using namespace std;
void a()
{
double q[40]={2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368,75025,121393,196418,317811,514229,832040,1346269,2178309,3524578,5702887,9227465},p[40]={1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368,75025,121393,196418,317811,514229,832040,1346269,2178309,3524578,5702887,9227465};//能看到这你也挺厉害
double num;
int n;
cin>>n;
for(int i=0;i<n;i++)
{
num+=q[i]/p[i];
}
printf("%.4lf",num);//小数点后4位
}
int main()
{
a();
}
这里空空如也







有帮助,赞一个