1

大家!所以,我是计算机科学班的新学生。我真的只在那里呆了几个星期,所以我知道的不多,但我的老师真的给了我一个曲线球。就在我以为我掌握了窍门的时候,他告诉我们在方案中创建一个函数,该函数采用两个值,然后输出 2 或最大值的“最大值”。扭曲之处在于,我们只能使用到目前为止所学的运算符……即加法、减法、除法、乘法和绝对值(如绝对值)。我完全被难住了,我想知道是否有人可以帮助我......

4

1 回答 1

1

答案应该与您实现它的语言无关。

这是您需要实现的公式:

a-(((a-b)-abs(a-b))/2)

证明:

让 {a,b} = {8,10}; 然后:

8-(((8-10)-abs(8-10))/2) = 8-((-2-(2))/2) = 8-(-4/2) = 10

让 {a,b} = {10,8}; 然后:

10-(((10-8)-abs(10-8))/2) = 10-(((2-(2)/2) = 10-(0/2) = 10

解释:

如您所见,答案是基于计算合适的修正并从第一个数字中减去它。校正的计算方式是,如果第一个数字较大,则校正为零,而如果第二个数字较大,则校正是第一个和第二个数字之间的差,因此从第一个数字中减去它产生第二个。

为了计算校正,我们首先取两个数字之间的差,然后从中减去差的绝对值。有两种可能:

  • 如果第一个数字更大,则差值为正,因此减法将产生零校正,这正是我们想要的。

  • 如果第二个数字更大,那么差值将是负数,因此减去它的绝对值会使它加倍。然后我们除以二以获得正确的修正。除法的酷之处在于它不会影响第一种可能性,因为将零除以二仍然会产生零。

执行:

在方案中实施上述计算的任务留给学生作为练习。

于 2016-09-21T21:58:35.353 回答