【题解】求分数序列(C++)

问题描述

分数序列求和问题通常指计算一个特定规律的分数序列前N项之和。常见的分数序列形式为:2/1, 3/2, 5/3, 8/5, 13/8...,即每一项的分子是前一项分子与分母之和,分母是前一项的分子。此类问题考察循环结构、变量更新和浮点数运算。

解题思路

观察分数序列的规律,分子和分母的更新遵循斐波那契数列的特性。初始化前两项的分子和分母,通过循环依次计算每一项的值并累加。注意使用浮点数类型存储中间结果以避免整数除法丢失精度。

代码实现

复制代码
#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    int N;
    cin >> N; // 输入项数
    
    double sum = 0.0;
    double numerator = 2.0, denominator = 1.0;
    
    for (int i = 1; i <= N; ++i) {
        sum += numerator / denominator;
        double next_numerator = numerator + denominator;
        double next_denominator = numerator;
        numerator = next_numerator;
        denominator = next_denominator;
    }
    
    cout << fixed << setprecision(4) << sum << endl;
    return 0;
}

关键点分析

  • 变量初始化 :分子初始值为2,分母初始值为1,和sum初始化为0。
  • 循环更新 :每次循环计算当前项的值并累加到sum,随后更新分子和分母为下一项的值。
  • 输出精度 :使用fixedsetprecision(4)控制输出保留4位小数。

示例输入输出

输入:

复制代码
20

输出:

复制代码
32.6603

复杂度分析

  • 时间复杂度:O(N),只需一次循环遍历前N项。
  • 空间复杂度:O(1),仅使用常数级别的额外空间。

扩展思考

若分数序列的规律不同(如分子分母为等差数列),需调整更新逻辑。例如,分子为1, 3, 5...,分母为2, 4, 6...,则循环内更新规则应改为:

复制代码
numerator += 2;
denominator += 2;
相关推荐
你撅嘴真丑4 小时前
第九章-数字三角形
算法
uesowys4 小时前
Apache Spark算法开发指导-One-vs-Rest classifier
人工智能·算法·spark
ValhallaCoder4 小时前
hot100-二叉树I
数据结构·python·算法·二叉树
董董灿是个攻城狮4 小时前
AI 视觉连载1:像素
算法
智驱力人工智能5 小时前
小区高空抛物AI实时预警方案 筑牢社区头顶安全的实践 高空抛物检测 高空抛物监控安装教程 高空抛物误报率优化方案 高空抛物监控案例分享
人工智能·深度学习·opencv·算法·安全·yolo·边缘计算
孞㐑¥5 小时前
算法——BFS
开发语言·c++·经验分享·笔记·算法
月挽清风5 小时前
代码随想录第十五天
数据结构·算法·leetcode
XX風6 小时前
8.1 PFH&&FPFH
图像处理·算法
NEXT066 小时前
前端算法:从 O(n²) 到 O(n),列表转树的极致优化
前端·数据结构·算法
代码游侠6 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法