【题解】求分数序列(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;
相关推荐
itzixiao15 分钟前
L1-067 洛希极限(10分)[java][python]
java·开发语言·算法
jinyishu_21 分钟前
链表经典OJ题
c语言·数据结构·算法·链表
葫三生26 分钟前
三生原理文章被AtomGit‌开源社区收录的意义探析?
人工智能·深度学习·神经网络·算法·搜索引擎·开源·transformer
AI进化营-智能译站29 分钟前
ROS2 C++开发系列15-模板实现通用算法|宏定义ROS2调试开关|一次编码适配多平台
java·c++·算法·ai
刀法如飞32 分钟前
Java数组去重的20种实现方式——指导AI解决不同问题的思路
java·算法·面试
良木生香38 分钟前
【C++初阶】STL——Vector从入门到应用完全指南(1)
开发语言·c++·神经网络·算法·计算机视觉·自然语言处理·数据挖掘
Brilliantwxx38 分钟前
【C++】String的模拟实现(代码实现与坑点讲解)
开发语言·c++·笔记·算法
憨波个1 小时前
【说话人日志】DOVER:diarization 输出融合算法
人工智能·算法·音频·语音识别·聚类
爱学习的张大1 小时前
具身智能论文问答(四):pi0
人工智能·算法
上弦月-编程1 小时前
指针编程:高效内存管理核心
java·数据结构·算法