对于这个题其实还可以加点要求:不使用< > <= >= 这四种判断表达式。否则可以直接简单的求解:

int c;
while(a > b)
{
    c = a;
    goto end;
}
c = b;
end:
print(c);

我想题目的本意不是这样的,那么不准使用< > <= >=如何求解呢?既然题目要求if、问好表达式、switch都不能使用,编程语言里面这几种结构还有什么?for、while是最先能想到的,我准备用while试一试,先做下面这个操作:

int a1 = a,b1 = b;
while(a1 && b1)
{
    a1--;
    b1--;
}

上面的程序执行完成之后我们得到a1和b1,a1+b1的值就是a和b的差值的绝对值,如果a>b,那么a1=a-b,b1=0,如果a<b,那么a1=0,b1=b-a。现在有a1、b1以及a1+b1这三个数据可以利用了。我们现在可以知道a和b的和a+b,想要求出a和b中的较大值,就需要从a+b中减去较小值,我们可以使用多项式表达一下这个关系:

max = (a+b) - α*a -  β*b;若a>b,则α=0,β=1,若a<b,则α=1,β=0,恰巧我们使用a1、b1、a1+b1就可以实现α、β,如下公式所示:

不使用if、?:、switch表达式求整数a、b两数中的较大值

其中α为不使用if、?:、switch表达式求整数a、b两数中的较大值,若a>b,那么α=0,否则α=1。或者使用更简单的一种方式:

不使用if、?:、switch表达式求整数a、b两数中的较大值

其中以第二项为例,a1要么等于0要么等于a、b差值的绝对值,那么β的值为0或者1,α的值也是一样的。

 

相关文章:

  • 2022-01-01
  • 2021-06-30
  • 2022-12-23
  • 2022-12-23
  • 2021-07-15
  • 2021-09-29
  • 2022-02-04
  • 2022-12-23
猜你喜欢
  • 2021-08-15
  • 2022-12-23
  • 2021-07-03
  • 2022-01-01
  • 2022-01-16
  • 2022-12-23
  • 2022-02-01
相关资源
相似解决方案