C++仅使用条件语句实现3个输入数字升序排序的中间值问题修复
C++三数升序排序代码修复方案
问题根因
- 中间值判断逻辑错误:你编写的
(n1 >= n2 && n1 >= n3) && (n1 <= n2 && n1 <= n3)条件要求变量同时是最大值和最小值,仅当三个输入完全相等时才会命中,其余场景下middle变量未初始化,输出的是内存随机值,你测试案例中输出的0就是该原因导致。 - 最小、最大值的判断条件未处理相等边界:如果输入存在相等数值(如
2 2 3),现有判断分支也无法命中,同样会出现变量未初始化的问题。
修复代码
修正判断逻辑,补全边界场景后的可运行代码如下:
#include <iostream> using namespace std; int main() { int n1, n2, n3; int largest, middle, smallest; cin >> n1 >> n2 >> n3; // 计算最小值 if (n1 <= n2 && n1 <= n3) { smallest = n1; } else if (n2 <= n1 && n2 <= n3) { smallest = n2; } else { smallest = n3; } // 计算中间值:满足大于等于其中一个数且小于等于另一个数 if ((n1 >= n2 && n1 <= n3) || (n1 <= n2 && n1 >= n3)) { middle = n1; } else if ((n2 >= n1 && n2 <= n3) || (n2 <= n1 && n2 >= n3)) { middle = n2; } else { middle = n3; } // 计算最大值 if (n1 >= n2 && n1 >= n3) { largest = n1; } else if (n2 >= n1 && n2 >= n3) { largest = n2; } else { largest = n3; } cout << smallest << " " << middle << " " << largest; return 0; }
修复后输入6 1 3会输出预期结果1 3 6,同时支持存在相等值的输入场景。
内容的提问来源于stack exchange,提问作者Julian Williams
相关产品推荐
相关产品推荐

