【题解】求分数序列(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;
相关推荐
再__努力1点3 小时前
LBP纹理特征提取:高鲁棒性的纹理特征算法
开发语言·人工智能·python·算法·计算机视觉
ZPC82103 小时前
PPO算法训练机器人时,如何定义状态/动作/奖励
人工智能·算法·机器人
永远都不秃头的程序员(互关)4 小时前
数据结构实战:从复杂度到C++实现
算法
努力学算法的蒟蒻4 小时前
day42(12.23)——leetcode面试经典150
算法·leetcode·面试
鹿角片ljp4 小时前
力扣226.翻转二叉树-递归
数据结构·算法·leetcode
TechNomad4 小时前
排序算法:归并排序算法
算法·排序算法
WBluuue4 小时前
数据结构和算法:Morris遍历
数据结构·c++·算法
scx201310045 小时前
20251117Manacher总结
算法·manacher
(●—●)橘子……5 小时前
记力扣42.接雨水 练习理解
笔记·学习·算法·leetcode·职场和发展