酷代码 AI
菜单
服务商

使用C++找出大于等于冰箱重量的最小力量值

好的,这是一个典型的“寻找满足条件的最小值”问题。我们可以用C++高效地解决它。 ## 📌 问题分析 我们需要从一组力量值中,找出**所有大于等于冰箱重量**的值,然后从中找到**最小的那个**。 **输入规模**:人数最多 100,000,每个数值不超过 100,000。直接遍历一次即可,无需排序(排序会增加不必要的开销)。 ## 💻 C++ 代码实现 ```cpp #include <iostream> #include <vector> #include <climits> using namespace std; int main() { int n, k; // 读取人数 cin >> n; // 读取力量值 vector<int> powers(n); for (int i = 0; i < n; i++) { cin >> powers[i]; } // 读取冰箱重量 cin >> k; // 遍历寻找满足条件的最小力量值 int minPower = INT_MAX; for (int power : powers) { if (power >= k && power < minPower) { minPower = power; } } // 输出结果(根据题意,一定存在符合条件的值) cout << minPower << endl; return 0; } ``` ## 🔍 代码详细说明 | 代码部分 | 说明 | |---------|------| | `#include <climits>` | 引入 `INT_MAX` 常量,用于初始化最小值变量 | | `vector<int> powers(n)` | 创建大小为 n 的动态数组存储力量值 | | `int minPower = INT_MAX` | 初始化为最大整数,确保第一次比较就能更新 | | `if (power >= k && power < minPower)` | 同时满足两个条件:够强 && 比当前找到的最小值更小 | | `cout << minPower` | 输出结果 | ## ⚡ 算法复杂度 - **时间复杂度**:O(n) — 只需遍历一次数组 - **空间复杂度**:O(n) — 存储力量值数组(也可以边读边处理,将空间优化到 O(1)) ## 💡 优化建议 如果不想使用 `vector` 存储所有数据,可以边读边处理,进一步节省内存: ```cpp #include <iostream> #include <climits> using namespace std; int main() { int n, k, power; int minPower = INT_MAX; cin >> n; for (int i = 0; i < n; i++) { cin >> power; if (power >= k && power < minPower) { minPower = power; } } // 注意:这种写法需要先读 k,或者先存力量值到数组再读 k // 所以这里仍保留数组方式更清晰,仅展示思路 } ``` 但根据题目输入格式,需要先读完整的力量值数组才能读 k,因此数组方式更合适。 ## 🧪 测试用例验证 **样例1**: - 输入:5人数,力量值 [2,7,10,5,3],冰箱重 5 - 大于等于 5 的有:7,10,5 → 最小是 5 ✅ **样例2**: - 输入:6人数,力量值 [1,15,3,9,12,4],冰箱重 7 - 大于等于 7 的有:15,9,12 → 最小是 9 ✅ ## 🚀 开发建议 1. **边界检查**:虽然题目保证一定有解,但实际开发中建议加判断,如果 `minPower` 仍为 `INT_MAX`,则输出“无人能挪动”的提示。 2. **输入鲁棒性**:使用 `while(cin >> x)` 读取不确定长度的输入。 3. **变量命名**:使用有意义的名称(如 `minValidPower`)增加可读性。 4. **避免多余操作**:不需要排序,排序会降低效率到 O(n log n)。 ######[AI写代码神器 | 894点数解答 | 2026-05-29 19:53:29]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]