题目描述
求1/1+1/2+2/3+3/5+5/8+8/13+13/21+21/34……的前n项的和。
输入格式
第1行:一个整数n( 1≤n≤30)。
输出格式
一行:一个小数,即前n项之和(保留3位小数)。
分子和分母都是斐波那契数列,逐项循环交换
#include <iostream>
using namespace std;
#include <iomanip>
int main()
{
int n;
cin>>n;
int fz = 1,fm = 1,t;
double r = 0;
for(int i=1;i<=n;i++)
{
r += fz*1.0/fm;
t = fz;
fz = fm;
fm += t;
}
cout<<setiosflags(ios::fixed)<<setprecision(3)<<r;
}
运行结果:
代码:
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int n;
double a = 1, b = 1;// a是分子,b是分母
double sum = 0;
cin >> n;
for (int i = 1; i <= n; i++)
{
sum += a / b;
int t = a + b;
a = b;
b = t;
}
cout << fixed << setprecision(3) << sum;
return 0;
}
从这里面看到了斐波那契数列,计算代码如下:
#include <stdio.h>
double fibonacci_sum(int n) {
if (n <= 0) {
return 0;
}
double fib_sum = 0;
double fib_prev = 1;
double fib_curr = 1;
for (int i = 0; i < n; i++) {
//if (i > 0) printf("+");
//printf("%.0f/%.0f", fib_prev, fib_curr);
fib_sum += fib_prev / fib_curr;
double fib_next = fib_prev + fib_curr;
fib_prev = fib_curr;
fib_curr = fib_next;
}
//printf("=");
return fib_sum;
}
int main() {
int n;
printf("请输入n的值:");
scanf("%d", &n);
double result = fibonacci_sum(n);
printf("%.3lf\n", result);
return 0;
}
以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:
思路:利用循环计算每一项的值,然后累加求和。
代码:
#include <iostream>
#include <iomanip> //用于输出保留小数位数
using namespace std;
int main()
{
int n;
cin >> n;
double sum = 0; //记录累加和
double a = 1, b = 1; //记录分子和分母的值
for (int i = 1; i <= n; i++)
{
sum += a / b; //累加当前项
double tmp = a;
a = b; //更新分子和分母的值
b = tmp + b;
}
cout << fixed << setprecision(3) << sum << endl; //保留3位小数输出
return 0;
}
例子:
输入:
5
输出:
6.320
#include<bits/stdc++.h>
using namespace std;
int gcd(int m,int n){
return m%n==0?n:gcd(n,m%n);
}
int main()
{
int n,i,fz=1,fm=1;
int a=0,b=0;
int g=0;
cin>>n;
for (int i=2;i<=n; i++)
{
a=fm*i;//new fm
b=fz*i+1*fm;//new fz
//--------化简------ 15/40 gcd(15,40)=5
g=gcd(a,b);
fm=a/g;
fz=b/g;
}
cout<<fz<<"/"<<fm<<endl;
return 0;
}
输入
4
输出
25/12
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
double a = 1.0, b = 1.0, sum = 0.0;
if (n == 1) {
printf("%.3lf", a / b);
return 0;
}
for (int i = 2; i <= n; i++) {
double c = a + b, d = b + c;
sum += c / d;
a = c, b = d;
}
printf("%.3lf", a / b + sum);
return 0;
}