C#重排三位数求最大值代码逻辑错误排查(禁用数组/循环/第三方方法)
三位自然数重排求最大值代码缺陷修复
问题需求
实现功能:对任意三位自然数n(取值范围满足100 ≤ n ≤ 999)的各位数字进行排列组合,返回可得到的最大整数。
示例:当n = 165时,正确返回结果为651。
现有实现代码
public static int Task2(int n) { int firstValue = n / 100; int secondValue = n / 10 % 10; int thirdValue = n % 10; if (secondValue >= thirdValue) { int swap1 = secondValue * 100 + firstValue * 10 + thirdValue; return swap1; } if (secondValue >= firstValue) { int swap2 = secondValue * 100 + thirdValue * 10 + firstValue; return swap2; } if (firstValue >= secondValue) { int swap3 = firstValue * 100 + thirdValue * 10 + secondValue; return swap3; } if (thirdValue >= secondValue) { int swap4 = thirdValue * 100 + firstValue * 10 + secondValue; return swap4; } if (thirdValue >= firstValue){ int swap5 = thirdValue * 100 + secondValue * 10 + firstValue; return swap5; } if (thirdValue == firstValue && thirdValue == secondValue) { int swap0 = secondValue * 100 + firstValue * 10 + thirdValue; return swap0; } return 0; }
问题现象
现有代码可通过大部分测试用例,唯独测试用例[TestCase(174, 741)]无法通过,可正常通过的测试用例如下:
[TestCase(401, 410)] [TestCase(999, 999)] [TestCase(370,730)] [TestCase(625,652)]
逻辑缺陷分析
原代码的分支判断存在顺序逻辑错误:
- 首个判断
secondValue >= thirdValue只要成立就直接返回结果,完全没有比较第二位和第一位的大小,也没有调整十位、个位的数字顺序。以失败用例174为例,三个位的数值分别是百位1、十位7、个位4,满足7>=4的条件,代码直接返回7*100 +1*10 +4 =714,没有把更大的个位4放到十位位置,结果错误。 - 分支覆盖不全,存在永远无法触发的死代码:三个数字全相等的判断放在分支最末尾,实际只要触发第一个
secondValue >= thirdValue的条件就会提前返回,永远走不到该分支。 - 整体逻辑没有遵循「百位放最大数字、十位放次大数字、个位放最小数字」的最优排列规则,分支判断零散没有统一逻辑。
符合约束的正确实现
实现约束:代码尽可能简洁,禁止使用数组、循环以及第三方方法
三个数字求最大、次大、最小值不需要复杂分支,利用三数总和减去最大、最小值即可得到中间值,代码逻辑清晰无冗余:
public static int Task2(int n) { int a = n / 100; int b = n / 10 % 10; int c = n % 10; // 取三个数中的最大值作为百位 int max = a >= b ? (a >= c ? a : c) : (b >= c ? b : c); // 取三个数中的最小值作为个位 int min = a <= b ? (a <= c ? a : c) : (b <= c ? b : c); // 总和减去最大、最小值得中间数作为十位 int mid = a + b + c - max - min; return max * 100 + mid * 10 + min; }
验证结果
- 失败用例174:max=7,min=1,mid=4,返回
7*100+4*10+1=741,符合预期 - 原有通过用例全部验证通过:401返回410、999返回999、370返回730、625返回652
- 边界值覆盖正常:如100返回100、109返回910、900返回900
内容的提问来源于stack exchange,提问作者WarmingZ
相关产品推荐
相关产品推荐

