C++作业求助:不使用数组/vector求最大及第二大数
解决思路与代码优化
不用数组或vector的前提下,找最大数和第二大数可以用更简洁的方式:先确定最大值,再在剩余数里找最大的就是第二大数。下面是具体实现和优化:
核心步骤
- 初始化两个变量
max1(最大值)和max2(第二大数) - 逐个对比输入的数,动态更新两个变量:
- 若当前数大于
max1,则把原max1赋值给max2,当前数成为新的max1 - 若当前数小于等于
max1但大于max2,则更新max2为当前数
- 若当前数大于
- 自动兼容多个数值相等的场景(比如多个最大值时,第二大数与最大值相同)
完整代码
#include <iostream> int main() { std::cout << "Insert five numbers: " << std::endl; int num1{}, num2{}, num3{}, num4{}, num5{}; std::cin >> num1 >> num2 >> num3 >> num4 >> num5; std::cout << '\n'; // 初始化最大值和第二大数 int max1, max2; // 先处理前两个数,确定初始的max1和max2 if (num1 > num2) { max1 = num1; max2 = num2; } else { max1 = num2; max2 = num1; } // 处理第三个数 if (num3 > max1) { max2 = max1; max1 = num3; } else if (num3 > max2) { max2 = num3; } // 处理第四个数 if (num4 > max1) { max2 = max1; max1 = num4; } else if (num4 > max2) { max2 = num4; } // 处理第五个数 if (num5 > max1) { max2 = max1; max1 = num5; } else if (num5 > max2) { max2 = num5; } // 输出结果 std::cout << "最大数是: " << max1 << std::endl; std::cout << "第二大数是: " << max2 << std::endl; return 0; }
代码说明
- 先通过前两个数初始化
max1和max2,避免未初始化的问题 - 对每个后续数值,仅用两层
if判断就完成更新,完全符合作业要求 - 相比你原来逐个判断所有数的方式,代码更简洁,逻辑清晰,也更容易维护
内容的提问来源于stack exchange,提问作者NedeiMaPpia4eMaEGnus
相关产品推荐
相关产品推荐

