目录
🌟 循环结构核心思想
循环控制 → 终止条件 → 边界处理 → 效率优化
本文精选洛谷循环结构题单中三大经典问题,通过C++与Python双语言对比实现,彻底掌握循环编程精髓!
📌 题目一:P1035 级数求和(条件循环)
题目描述
求最小的正整数n
,使得1 + 1/2 + 1/3 + ... + 1/n > K
。
解题思路
-
初始化变量:总和
sum
从0开始累加 -
循环终止条件:
sum > K
时退出 -
循环控制:分母
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
(可能为负),输出反转后的数(去除前导零)。
解题思路
-
处理符号:记录正负号并转为正数处理
-
循环拆解:通过取余和整除逐位反转
-
边界处理:输入为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
所需步数。
解题思路
-
初始化变量:当前距离
current
和步数steps
-
循环累加:每次游距乘以0.98
-
终止条件:
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)
💡 循环结构四步心法
-
初始化变量:明确循环控制变量的初始值
-
终止条件:确保循环能正常退出(警惕死循环)
-
循环体逻辑:处理好边界和中间状态
-
更新变量:正确修改循环控制变量
🚨 常见问题与避坑指南
问题 | 解决方案 |
---|---|
浮点精度误差 | 使用double 替代float (C++) |
死循环风险 | 确保循环变量最终满足终止条件 |
负数处理遗漏 | 先取绝对值再处理,最后还原符号 |
🌐 实战扩展(LeetCode真题)
-
69. x的平方根 → 类似二分查找的循环
-
7. 整数反转 → 与P1307异曲同工
-
50. Pow(x,n) → 快速幂循环优化
🔥 关注我,算法能力指数级提升!