使用最大函数但没有条件的三种算法的中值 - 更新

问题描述 投票:0回答:2

在一家工程初创公司的面试中,我被问到这个问题:

计算机能够执行 4 种基本数学运算(加、减、乘、除)和 Max() 运算,返回两个接收到的参数中的较大者。编写一个程序,接收三个数字并返回三个数字中间的那个。您不得使用条件句 (if)。

示例输入和预期输出:

mid(1, 5, 2) 应该返回结果 2.

没有指定编程语言。

我设计了以下程序并用C(我唯一比较了解的语言......)编写了它:

int x,y,z,q1,q2,q3;
printf("Type 3 numbers: \n");
scanf("%d %d %d", &x, &y, &z);
q1=max(x,y);
q2=max(x,z);
q3=max(y,z);
int mid(int q1, int q2, int q3)
{
while (q2<q3)
{
while (q1<q2)
{
return q2;
}
while (q2<q1)
{
return q1;
}
while (q1<q2)
{
while (q3<q2)
{
while(q1<q3)
{
return q3;
}
return q1;
}
return q2;
}
int nummid=mid(x,y,z);
nummid 
c language-agnostic
2个回答
1
投票

a + b - Max(a, b)
给出
a
b
的最小值(忽略溢出)。称之为
Min(a, b)
.

Max3(a, b, c)
Max(Max(a, b), c)
,即
a
b
c
中的最大值。

Min3(a, b, c)
成为
Min(Min(a, b), c)
.

那么

a
b
c
的中间是
a + b + c - Max3(a, b, c) - Min3(a, b, c)
.


0
投票

假设可以使用NO条件(并且MAX是内置操作,这意味着下面的MAX宏不算):

  #define MAX(a, b) ((a) < (b) ? (b) : (a)) 
  #define MIN(a, b) ((a) + (b) - MAX((a), (b)))  
  
  int mid(int i, int j, int k)
        {
        int x;
        
        x = i + j + k;
        x -= MIN(MIN(i, j), k);
        x -= MAX(MAX(i, j), k);
        return x;
        }
© www.soinside.com 2019 - 2024. All rights reserved.