吊桥铺木问题:C++条件筛选与累加终止逻辑实现
好的,我们先来分析一下题目要求,然后用 C++ 编写代码。 ## 🧠 问题分析 1. **输入**:第一行是整数 `n`,表示有 `n` 块木头。 接下来 `n` 行,每行两个整数:`长度` 和 `宽度`。 2. **规则**: - 只有长度 **≥ 5** 的木头才能放到吊桥上。 - 按照输入顺序依次判断并放置。 - 当已放置木头的 **宽度之和 ≥ 10** 时,停止放置。 - 输出:最终放置的 **木头数量** 和 **总宽度**。 3. **注意**: - 即使某块木头长度合格,如果放置它之前宽度总和已经 ≥10,也不应再放置。 - 输出的是实际放置的木头的数量和它们的总宽度。 --- ## 📝 算法步骤 1. 读入 `n`。 2. 初始化 `count = 0`(放置的木头数量),`total_width = 0`(总宽度)。 3. 循环 `n` 次,每次读入 `length` 和 `width`: - 如果 `total_width >= 10`,直接跳过后续所有木头(可以提前结束循环)。 - 如果 `length >= 5`: - `count++` - `total_width += width` 4. 输出 `count` 和 `total_width`。 --- ## 💻 C++ 代码实现 ```cpp #include <iostream> using namespace std; int main() { int n; cin >> n; int count = 0; // 放置的木头数量 int total_width = 0; // 放置的木头的总宽度 for (int i = 0; i < n; i++) { int length, width; cin >> length >> width; // 如果已经达到宽度要求,不再处理后续木头 if (total_width >= 10) { continue; // 或者直接 break 也可以,因为题目说“依次”放,但宽度够了后面即使合格也不放 // 根据样例,应该是 continue 跳过,但为了效率可以直接 break。 // 我们这里用 break 更符合逻辑:一旦满足条件,后续木头不再考虑。 } // 检查长度是否合格 if (length >= 5) { count++; total_width += width; } } cout << count << " " << total_width << endl; return 0; } ``` --- ## 🔍 代码解释 - `int n; cin >> n;`:读入木头总数。 - `for` 循环依次处理每块木头。 - `if (total_width >= 10) { break; }`:一旦总宽度达到 10,立即终止循环,不再看后面的木头。 - `if (length >= 5)`:长度合格才计入。 - 最后输出计数和总宽度。 --- ## ✅ 测试样例 **样例 1**: ``` 5 3 2 5 5 4 3 8 6 5 4 ``` 处理过程: 1. 长度 3 (<5) 忽略。 2. 长度 5 (合格),count=1, total_width=5。 3. 长度 4 (<5) 忽略。 4. 长度 8 (合格),count=2, total_width=5+6=11。 5. 此时 total_width=11 ≥10,循环结束(后续木头不看)。 输出:`2 11` ✅ **样例 2**: ``` 6 4 3 6 3 8 6 3 2 5 6 4 3 ``` 处理过程: 1. 长度 4 (<5) 忽略。 2. 长度 6 (合格),count=1, total_width=3。 3. 长度 8 (合格),count=2, total_width=3+6=9。 4. 长度 3 (<5) 忽略。 5. 长度 5 (合格),count=3, total_width=9+6=15。 6. 此时 total_width=15 ≥10,循环结束。 输出:`3 15` ✅ --- ## 🛡️ 开发建议 1. **边界条件**:注意 `n=0` 的情况,代码也能正确处理(输出 `0 0`)。 2. **提前终止**:使用 `break` 可以提高效率,避免不必要的循环。 3. **变量命名**:使用有意义的变量名(如 `count`, `total_width`)增强可读性。 4. **输入验证**:在实际应用中,可以加入对输入数据的合法性检查(如宽度是否为非负整数)。 5. **扩展性**:如果规则变化(如长度阈值或宽度阈值可变),可以将这些值定义为常量或从输入读取,提高代码灵活性。 --- ######[AI写代码神器 | 1087点数解答 | 2026-03-20 19:25:43]
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)342
- Python爬虫:多页图片爬取与本地保存全流程揭秘(字节豆包 | 119点数解答 | 2025-01-05 12:49:42)257
- Python 网页图片爬取代码分析与优化建议:异常处理、路径优化及爬取规则遵守(字节豆包 | 172点数解答 | 2025-01-05 12:50:16)227
- Python爬虫实战:爬取https://file.kole8.com图片全流程优化与注意事项 (字节豆包 | 530点数解答 | 2025-01-05 12:50:26)191
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)309
- Python 求解小火龙正整数序列中等差数列整数对个数问题(字节豆包 | 227点数解答 | 2025-02-04 13:34:48)183
- C++ 求解小火龙正整数序列中等差数列整数对个数问题及代码示例(字节豆包 | 373点数解答 | 2025-02-04 13:35:22)186
- 50 分判断题大揭秘:变量、条件、循环与数组知识正误辨析(字节豆包 | 229点数解答 | 2025-12-21 19:15:16)61
- 怪象:a 为 3、b 为 5 时 “a == 3 && b == 5” 竟不成立! (DeepSeek | 81点数解答 | 2026-02-08 19:59:20)21
- C++ 实现输出多排石像编号:附代码详解与复杂度分析(字节豆包 | 414点数解答 | 2026-01-09 19:23:13)71
- C++ 实现输出多排石像编号:代码详解与逻辑剖析(字节豆包 | 247点数解答 | 2026-01-09 19:24:53)23
- 代码详解:输出每排石像编号的程序实现(字节豆包 | 344点数解答 | 2026-02-07 20:02:02)13