You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 01:09:57