【C++】B2069 求分数序列和题目解析与优化详解

文章目录
- 💯前言
- 💯题目描述
- 输入格式
- 输出格式
- 输入输出样例
- 输入:
- 输出:
- 💯解题思路
- 分析题目
- 解题步骤
- 💯代码实现
- 我的代码实现
- 实现特点
- 老师的代码实现
- 实现特点
- 优点
- 缺点
- 💯对比分析
- 💯优化方案
- 改进点
- 💯小结

💯前言
- 本篇文章将详细解析洛谷B2069题“求分数列和”的解题过程,包括题目的详细描述、解题思路、不同代码实现方案的比较与优化,以及对相关概念的深入拓展。文章的目标是帮助读者全面掌握此类题目的解法,并提升在C++编程中的逻辑分析与代码优化能力。
C++ 参考手册

💯题目描述
B2069 求分数序列和

有一个分数序列:
q 1 p 1 , q 2 p 2 , q 3 p 3 , q 4 p 4 , ⋯ \frac{q_1}{p_1}, \frac{q_2}{p_2}, \frac{q_3}{p_3}, \frac{q_4}{p_4}, \cdots p1q1,p2q2,p3q3,p4q4,⋯
其中,满足递推关系:
- q i + 1 = q i + p i q_{i+1} = q_i + p_i qi+1=qi+pi
- p i + 1 = q i p_{i+1} = q_i pi+1=qi
- 初始值 q 1 = 2 q_1 = 2 q1=2, p 1 = 1 p_1 = 1 p1=1。
例如,前6项依次为:
2 1 , 3 2 , 5 3 , 8 5 , 13 8 , 21 13 \frac{2}{1}, \frac{3}{2}, \frac{5}{3}, \frac{8}{5}, \frac{13}{8}, \frac{21}{13} 12,23,35,58,813,1321
任务是计算分数序列前 n n n 项的和。结果保留4位小数。
输入格式
输入一行包含一个正整数 n n n( n ≤ 30 n \leq 30 n≤30)。
输出格式
输出一行浮点数,表示分数序列前 n n n 项之和,精确到小数点后4位。
输入输出样例
输入:
2
输出:
3.5000
💯解题思路
分析题目
-
递推关系:
- 序列的分子和分母满足递推关系:
q i + 1 = q i + p i q_{i+1} = q_i + p_i qi+1=qi+pi
p i + 1 = q i p_{i+1} = q_i pi+1=qi - 初始条件为 q 1 = 2 q_1 = 2 q1=2, p 1 = 1 p_1 = 1 p1=1。
- 序列的分子和分母满足递推关系:
-
目标:
- 计算前 n n n 项的分数和:
sum = q 1 p 1 + q 2 p 2 + ⋯ + q n p n \text{sum} = \frac{q_1}{p_1} + \frac{q_2}{p_2} + \cdots + \frac{q_n}{p_n} sum=p1q1+p2q2+⋯+pnqn
- 计算前 n n n 项的分数和:
-
数据范围:
- n ≤ 30 n \leq 30 n≤30,意味着序列递推和累加的规模较小,可以采用简单的迭代方式解决。
-
精度要求:
- 输出结果保留小数点后4位。
解题步骤
-
初始化变量:
- 定义两个变量分别表示分子 q q q 和分母 p p p。
- 定义一个变量 s u m sum sum 用于累加结果。
-
递推计算:
- 根据公式更新 q q q 和 p p p。
- 累加当前项的分数值: q p \frac{q}{p} pq。
-
输出结果:
- 使用浮点数输出,保留小数点后4位。
💯代码实现
我的代码实现
以下是我的代码实现:
#include <iostream>
#include <cstdio>
using namespace std;int main() {double sum = 0; // 累加和,双精度浮点数int n = 0, temp = 0;int z = 2, m = 1; // 初始化分子和分母cin >> n;for (int i = 0; i < n; i++) {sum += z * 1.0 / m; // 累加当前项temp = z; // 暂存当前分子z = z + m; // 计算新的分子m = temp; // 更新分母为旧的分子}printf("%.4lf", sum); // 输出结果,保留 4 位小数return 0;
}


实现特点
-
变量设计:
- 使用
z表示当前分子,m表示当前分母。 - 使用
temp保存中间变量,避免覆盖数据。
- 使用
-
核心递推逻辑:
- q i + 1 = q i + p i q_{i+1} = q_i + p_i qi+1=qi+pi 用
z = z + m实现。 - p i + 1 = q i p_{i+1} = q_i pi+1=qi 用
m = temp实现。
- q i + 1 = q i + p i q_{i+1} = q_i + p_i qi+1=qi+pi 用
-
浮点数计算:
- 显式将
z / m转换为浮点数计算,确保精度。
- 显式将
-
结果输出:
- 使用
printf保留4位小数。
- 使用
老师的代码实现
以下是老师给出的代码实现:
#include <iostream>
#include <cstdio> // 用于 printf
using namespace std;int main() {int n = 0;cin >> n;float sum = 0; // 累加和,浮点类型float q = 2; // 初始化分子 qfloat p = 1; // 初始化分母 pfor (int i = 0; i < n; i++) {sum += q / p; // 累加当前项q = q + p; // 计算新的 qp = q - p; // 计算新的 p}printf("%.4f\n", sum); // 输出结果,保留 4 位小数return 0;
}


实现特点
-
变量优化:
- 直接使用
float类型计算,避免临时变量。
- 直接使用
-
核心递推逻辑:
- 使用
q = q + p和p = q - p通过数学公式简化更新。
- 使用
-
结果输出:
- 同样使用
printf保留4位小数。
- 同样使用
优点
-
代码简洁:
- 变量数量少,通过数学公式避免了中间变量。
-
逻辑紧凑:
- 更新
p的方式非常简练,体现了数学上的优化。
- 更新
缺点
-
可读性较差:
p = q - p的逻辑不够直观,对初学者不够友好。
-
精度问题:
- 使用
float类型可能导致精度不足。
- 使用
💯对比分析
| 对比点 | 我的代码 | 老师的代码 |
|---|---|---|
| 变量数量 | 多一个临时变量 temp | 仅用两个变量 q 和 p |
| 代码可读性 | 逻辑清晰,易于理解 | 数学简化逻辑不直观 |
| 浮点精度 | 使用 double,精度更高 | 使用 float,精度稍低 |
| 内存使用 | 稍高,多用了一个变量 | 更低,只用了必要的变量 |
| 实现复杂度 | 适中,易于实现和调试 | 较低,但对理解有一定要求 |
💯优化方案
结合两者的优点,我们可以进一步优化代码:
#include <iostream>
#include <iomanip> // 用于控制输出精度
using namespace std;int main() {int n;cin >> n;double sum = 0.0; // 使用 double 提高精度int q = 2, p = 1; // 分子和分母初始化for (int i = 0; i < n; i++) {sum += static_cast<double>(q) / p; // 显式类型转换q = q + p; // 直接更新分子p = q - p; // 通过差值更新分母}cout << fixed << setprecision(4) << sum << endl; // 使用现代化流输出return 0;
}


改进点
-
精度提升:
- 使用
double类型以提高浮点运算的精度。
- 使用
-
代码简化:
- 去掉了临时变量,简化逻辑。
-
现代化风格:
- 使用
cout和setprecision替代printf,更符合 C++ 标准。
- 使用
💯小结
本题主要考察递推关系的理解与实现能力,同时对浮点数精度控制和代码优化提出了要求。在解题过程中,我们需要:
- 明确数列的递推关系。
- 合理设计变量以实现递推计算。
- 结合题目需求选择合适的浮点类型与输出方式。
通过对不同代码实现方案的比较与优化,我们不仅学会了更高效的解题方法,还理解了代码设计中的权衡取舍。希望本文能为读者提供帮助,在未来的编程学习中取得更大的进步!

![]()
![]()
![]()
![]()
![]()
![]()
相关文章:
【C++】B2069 求分数序列和题目解析与优化详解
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目描述输入格式输出格式输入输出样例输入:输出: 💯解题思路分析题目解题步骤 💯代码实现我的代码实现实现特点 老师的代码…...
4.FPGA如何实现设计
在前面分别引入了,LUT的知识,全局时钟网络,以及FPGA内部的资源。 LUT的知识: 在FPGA设计中实现的逻辑运算在不借用其他的硬核的基础上都是在LUT中通过查表的方式进行完成的,比如实现的c a & b;就是将a&b的所…...
SO-CNN-LSTM-MATT蛇群算法优化注意力机制深度学习多特征分类预测
SO-CNN-LSTM-MATT蛇群算法优化注意力机制深度学习多特征分类预测(多输入单输出) 目录 SO-CNN-LSTM-MATT蛇群算法优化注意力机制深度学习多特征分类预测(多输入单输出)分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matl…...
大模型-Ollama使用相关的笔记
大模型-Ollama使用相关的笔记 解决Ollama外网访问问题(配置ollama跨域访问)Postman请求样例 解决Ollama外网访问问题(配置ollama跨域访问) 安装Ollama完毕后, /etc/systemd/system/ollama.service进行如下修改&#…...
OpenCV计算机视觉 02 图片修改 图像运算 边缘填充 阈值处理
目录 图片修改(打码、组合、缩放) 图像运算 边缘填充 阈值处理 上一篇文章: OpenCV计算机视觉 01 图像与视频的读取操作&颜色通道 图片修改(打码、组合、缩放) # 图片打码 import numpy as np a cv2.imre…...
langchain使用FewShotPromptTemplate出现KeyError的解决方案
大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...
tryhackme-Cyber Security 101-Linux Shells(linux命令框)
目的:了解脚本和不同类型的 Linux shell。 任务1:Introduction to Linux Shells(Linux Shell 简介) 作为操作系统的常规用户,我们都广泛使用图形用户界面 (GUI) 来执行大多数操作。只需点击几…...
亚远景-ISO 21434标准涵盖了哪些方面?
ISO 21434标准《道路车辆—网络安全工程》全面涵盖了汽车网络安全领域,其目的是确保汽车电子系统在整个产品生命周期中的网络安全性能。具体来说,该标准包括以下几个方面: 1. 术语和定义 :提供汽车网络安全相关的术语、概念和定义…...
第3章 集合与关系
2024年12月24日一稿 2024年12月26日二稿 🐰3.1 集合的概念和表示法 🦘3.1.1 集合的表示 🦘3.1.2 基本概念 🐰3.2 集合的运算 🦘3.2.1 集合的基本运算 🦘3.2.2 有穷计数集 🦘3.2.3 广义交和广义…...
【vmware】|设置共享文件夹
目的: 虚拟机中设置共享文件夹,本地物理机中可以搜到该共享文件夹 1、虚拟机: 设置共享文件夹 右键属性-共享页码进行下列设置 点击网络和共享中心,检查下列选项 二、在本地物理机中启用网络发现: 此时,刷新网络…...
Log4j1.27配置日志输出级别不起效
起因:构建独立版本debezuim使用时,日志一直打印debug信息。 原因:包冲突问题,进行排包操作。 参考log4j日志级别配置完成后不生效 系统一直打印debug日志_log4j不起作用-CSDN博客 1、application.properties logging.configc…...
计算机图形学知识点汇总
一、计算机图形学定义与内容 1.图形 图形分为“图”和“形”两部分。 其中,“形”指形体或形状,存在于客观世界和虚拟世界,它的本质是“表示”;而图则是包含几何信息与属性信息的点、线等基本图元构成的画面,用于表达…...
详解下c语言中struct和union的对齐规则
接触过c语言的同学应该都知道字节对齐。有些时候我们很容易弄错字节对齐的方式,特别是涉及到struct(结构体)和union(联合体)时。今天我们通过详细例子来说明下struct和union的对齐规则,以便了解各种struct和…...
ubuntu安装sublime安装与免费使用
1. ubuntu安装sublime 参考官网: Linux Package Manager Repositories 2. 破解过程 打开如下网址,打开/opt/sublime_text/sublime_text https://hexed.it/ 3. 替换在hexed打开的文件中查找并替换: 4180激活方法 使用二进制编辑器 8079 0500 0f94 c2替换为 c641 05…...
攻防世界 cookie
开启场景 Cookie(HTTP cookie)是一种存储在用户计算机上的小型文本文件。它由网站通过用户的浏览器在用户访问网站时创建,并存储一些用于跟踪和识别用户的信息。Cookie 主要用于在网站和浏览器之间传递数据,以便网站可以根据用户的…...
深度学习笔记1:神经网络与模型训练过程
参考博客:PyTorch深度学习实战(1)——神经网络与模型训练过程详解_pytorch 实战-CSDN博客 人工神经网络 ANN:张量及数学运算的集合,排列方式近似于松散的人脑神经元排列 组成 1)输入层 2)隐…...
什么是 DevOps 自动化?
DevOps 自动化是一种现代软件开发方法,它使用工具和流程来自动化任务并简化工作流程。它将开发人员、IT 运营和安全团队聚集在一起,帮助他们有效协作并交付可靠的软件。借助 DevOps 自动化,组织能够处理重复性任务、优化流程并更快地将应用程…...
使用 Python 操作 MySQL 数据库的实用工具类:MySQLHandler
操作数据库是非常常见的需求,使用 Python 和 pymysql 库封装一个通用的 MySQL 数据库操作工具类,并通过示例演示如何使用这个工具类高效地管理数据库。 工具类的核心代码解析 MySQLHandler 类简介 MySQLHandler 是一个 Python 类,用于简化…...
DB-GPT V0.6.3 版本更新:支持 SiliconCloud 模型、新增知识处理工作流等
DB-GPT V0.6.3版本现已上线,快速预览新特性: 新特性 1. 支持 SiliconCloud 模型,让用户体验多模型的管理能力 如何使用: 修改环境变量文件.env,配置SiliconCloud模型 # 使用 SiliconCloud 的代理模型 LLM_MODELsiliconflow_p…...
亚式期权定价模型Turnbull-Wakeman进行delta对冲
Turnbull-Wakeman Model是一种用于定价和对冲亚式期权的数学模型。该模型由David Turnbull和Keith Wakeman在1990年提出,用于解决亚式期权的定价问题。 亚式期权是一种路径依赖类型的期权,其期权价格与标的资产价格某个期间内的平均值有关,假…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
