【题解】求分数序列(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;
相关推荐
福楠几秒前
C++ | 继承
c语言·开发语言·数据结构·c++·算法
华如锦2 分钟前
MongoDB作为小型 AI智能化系统的数据库
java·前端·人工智能·算法
机器学习之心HML3 分钟前
GSABO(通常指混合了模拟退火SA和天牛须搜索BAS的改进算法)与BP神经网络结合,用于爆破参数优选
人工智能·神经网络·算法·爆破参数优选
轻微的风格艾丝凡4 分钟前
数织求解脚本技术文档
算法·matlab
你怎么知道我是队长5 分钟前
C语言---强制类型转换
c语言·开发语言·算法
_OP_CHEN5 分钟前
【算法基础篇】(四十六)同余方程终极攻略:从基础转化到实战破解
c++·算法·蓝桥杯·数论·同余方程·扩展欧几里得算法·acm/icpc
程序员泡椒2 小时前
二分查找Go版本实现
数据结构·c++·算法·leetcode·go·二分
小雨下雨的雨2 小时前
Flutter鸿蒙共赢——墨染算法:柏林噪声与鸿蒙生态中的数字水墨意境
算法·flutter·华为·交互·harmonyos·鸿蒙
NAGNIP8 小时前
万字长文!回归模型最全讲解!
算法·面试
知乎的哥廷根数学学派8 小时前
面向可信机械故障诊断的自适应置信度惩罚深度校准算法(Pytorch)
人工智能·pytorch·python·深度学习·算法·机器学习·矩阵