【题解】求分数序列(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;
相关推荐
dapeng28701 小时前
分布式系统容错设计
开发语言·c++·算法
qq_417695051 小时前
代码热修复技术
开发语言·c++·算法
Liu628887 小时前
C++中的工厂模式高级应用
开发语言·c++·算法
AI科技星8 小时前
全尺度角速度统一:基于 v ≡ c 的纯推导与验证
c语言·开发语言·人工智能·opencv·算法·机器学习·数据挖掘
条tiao条8 小时前
KMP 算法详解:告别暴力匹配,让字符串匹配 “永不回头”
开发语言·算法
干啥啥不行,秃头第一名9 小时前
C++20概念(Concepts)入门指南
开发语言·c++·算法
zzh940779 小时前
Gemini 3.1 Pro 硬核推理优化剖析:思维织锦、动态计算与国内实测
算法
2301_807367199 小时前
C++中的解释器模式变体
开发语言·c++·算法
愣头不青9 小时前
617.合并二叉树
java·算法
MIUMIUKK10 小时前
双指针三大例题
算法