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

基于Max()函数且无分支语句的三数取中算法实现问询

无条件语句的三数中位数实现方案(仅用四则运算与Max())

问题回顾

给定一台仅支持加减乘除四则运算和返回两数较大值的Max()函数的计算机,编写一个接收三个数字并返回其中位数的程序,要求不得使用if等条件语句。示例:mid(1, 5, 2)应返回2。

你的代码问题分析

你提交的尝试代码存在多处问题:

  • C语言不允许在函数内部嵌套定义另一个函数,mid()的定义位置错误
  • 嵌套的while循环本质还是依赖条件判断,违反了题目“禁用条件语句”的要求
  • 代码存在未闭合的代码块、无意义的语句,逻辑混乱无法正常运行

正确实现思路与代码

核心思路是利用中位数的数学特性,通过Max()和四则运算推导最小值(Min(a,b) = a + b - Max(a,b)),再组合出中位数的计算逻辑,全程无需任何条件判断。

实现方式1:通过推导Min函数实现

// 基于Max推导Min函数,无任何条件判断
int Min(int a, int b) {
    return a + b - Max(a, b);
}

// 计算三数中位数
int mid(int x, int y, int z) {
    int max_xy = Max(x, y);
    int min_xy = Min(x, y);
    // 先取x和y的最大值与z的最小值,再和x与y的最小值取最大值,得到中位数
    return Max(min_xy, Min(max_xy, z));
}

实现方式2:完全展开为纯Max与四则运算(无需额外Min函数)

如果不想单独定义Min函数,可以直接将逻辑展开:

int mid(int x, int y, int z) {
    return Max(
        x + y - Max(x, y),
        Max(x, y) + z - Max(Max(x, y), z)
    );
}

实现方式3:通过总和减最大最小值实现

中位数也等于三个数的总和减去最大值与最小值,同样可以用Max推导最小值:

int mid(int x, int y, int z) {
    int total = x + y + z;
    int max_val = Max(x, Max(y, z));
    // 推导三数中的最小值
    int min_xy = x + y - Max(x, y);
    int min_val = min_xy + z - Max(min_xy, z);
    
    return total - max_val - min_val;
}

验证示例

以mid(1, 5, 2)为例:

  1. 方式1:Max(1,5)=5,Min(1,5)=1;Min(5,2)=2;Max(1,2)=2,返回结果正确
  2. 方式3:总和为8,最大值为5,最小值为1;8-5-1=2,返回结果正确

内容的提问来源于stack exchange,提问作者Stephbak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 21:37:29