循环结构双剑合璧:C++与Python征服洛谷三大经典循环难题

目录

🌟 循环结构核心思想

📌 题目一:P1035 级数求和(条件循环)

题目描述

解题思路

代码实现

📌 题目二:P1307 数字反转(循环拆解数字)

题目描述

解题思路

代码实现

📌 题目三:P1423 小玉在游泳(浮点循环)

题目描述

解题思路

代码实现

💡 循环结构四步心法

🚨 常见问题与避坑指南

🌐 实战扩展(LeetCode真题)


🌟 循环结构核心思想

循环控制 → 终止条件 → 边界处理 → 效率优化
本文精选洛谷循环结构题单中三大经典问题,通过C++与Python双语言对比实现,彻底掌握循环编程精髓!


📌 题目一:P1035 级数求和(条件循环)

题目描述

求最小的正整数n,使得1 + 1/2 + 1/3 + ... + 1/n > K

解题思路
  1. 初始化变量:总和sum从0开始累加

  2. 循环终止条件sum > K时退出

  3. 循环控制:分母i从1递增,逐项累加


代码实现

C++版(精度控制)

#include <iostream>
using namespace std;

int main() {
    int K, i = 0;
    double sum = 0;
    cin >> K;
    while(sum <= K) {  // 注意是 <=
        i++;
        sum += 1.0 / i;
    }
    cout << i;
    return 0;
}

Python版(浮点优化)

K = int(input())
sum_val, i = 0.0, 0
while sum_val <= K:
    i += 1
    sum_val += 1 / i
print(i)

📌 题目二:P1307 数字反转(循环拆解数字)

题目描述

给定整数n(可能为负),输出反转后的数(去除前导零)。

解题思路
  1. 处理符号:记录正负号并转为正数处理

  2. 循环拆解:通过取余和整除逐位反转

  3. 边界处理:输入为0或末尾含0的情况


代码实现

C++版(数学运算)

#include <iostream>
using namespace std;

int main() {
    int n, reversed = 0;
    cin >> n;
    int sign = n < 0 ? -1 : 1;
    n = abs(n);
    
    while(n != 0) {
        reversed = reversed * 10 + n % 10;
        n /= 10;
    }
    cout << reversed * sign;
    return 0;
}

Python版(字符串处理)

n = input().strip()
sign = -1 if n[0] == '-' else 1
n = n.lstrip('-').rstrip('0') or '0'  # 处理全零情况
print(sign * int(n[::-1]))

📌 题目三:P1423 小玉在游泳(浮点循环)

题目描述

小玉第一步游2米,之后每一步游距为前一步的98%,求达到目标距离S所需步数。

解题思路
  1. 初始化变量:当前距离current和步数steps

  2. 循环累加:每次游距乘以0.98

  3. 终止条件current >= S时停止


代码实现

C++版(浮点精度控制)

#include <iostream>
using namespace std;

int main() {
    double S, current = 0, step = 2;
    int steps = 0;
    cin >> S;
    
    while(current < S) {
        current += step;
        step *= 0.98;
        steps++;
    }
    cout << steps;
    return 0;
}

Python版(简洁实现)

S = float(input())
current, step, steps = 0, 2, 0
while current < S:
    current += step
    step *= 0.98
    steps += 1
print(steps)

💡 循环结构四步心法

  1. 初始化变量:明确循环控制变量的初始值

  2. 终止条件:确保循环能正常退出(警惕死循环)

  3. 循环体逻辑:处理好边界和中间状态

  4. 更新变量:正确修改循环控制变量


🚨 常见问题与避坑指南

问题解决方案
浮点精度误差使用double替代float(C++)
死循环风险确保循环变量最终满足终止条件
负数处理遗漏先取绝对值再处理,最后还原符号

🌐 实战扩展(LeetCode真题)

  1. 69. x的平方根 → 类似二分查找的循环

  2. 7. 整数反转 → 与P1307异曲同工

  3. 50. Pow(x,n) → 快速幂循环优化


🔥 关注我,算法能力指数级提升!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值