Computer science 创建只使用基本运算符输出两个数字列表中最大值的函数

Computer science 创建只使用基本运算符输出两个数字列表中最大值的函数,computer-science,racket-student-languages,Computer Science,Racket Student Languages,大家好!所以,我是计算机科学课的一名新生。我真的只在那里呆了几个星期,所以我知道的不多,但我的老师真的给了我一个弧线球。就在我认为我已经掌握了诀窍的时候,他告诉我们在scheme中创建一个函数,取两个值,然后输出2或最大值的“最大”值。问题是我们只能使用到目前为止所学的运算符。。。也就是加法、减法、除法、乘法和绝对值。我完全被难住了,我想知道是否有人能帮我解决…答案应该与你实现它的语言无关 这是您需要实现的公式: a-(((a-b)-abs(a-b))/2) 证明: 设{a,b}={8,10}

大家好!所以,我是计算机科学课的一名新生。我真的只在那里呆了几个星期,所以我知道的不多,但我的老师真的给了我一个弧线球。就在我认为我已经掌握了诀窍的时候,他告诉我们在scheme中创建一个函数,取两个值,然后输出2或最大值的“最大”值。问题是我们只能使用到目前为止所学的运算符。。。也就是加法、减法、除法、乘法和绝对值。我完全被难住了,我想知道是否有人能帮我解决…

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

这是您需要实现的公式:

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

说明: 正如你所看到的,答案是基于计算一个合适的修正并从第一个数字中减去它。修正的计算方式是,如果第一个数字较大,则修正为零,而如果第二个数字较大,则修正为第一个数字和第二个数字之间的差值,因此从第一个中减去它就得到第二个

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

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

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

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

请发布您迄今为止编写的代码,指出困难如果您的老师要求您实现三个数字的列表,那么您将遇到麻烦。非常感谢!这是一个很大的帮助,我想知道您是否可以分享你的思考过程,以便我能更好地理解,也许下次我自己能理解?我猜测和检查各种随机函数,显然这不是一个好方法…我只是想了解你的想法。我的思考过程始于
abs()
必须起主要作用,因为为了对两个数字进行排序,您需要一个
if
,并从可用的操作
abs()中
是唯一一个具有内置类型的
if
。然后我选择了两个数字,8和10,用各种不同的方式进行了几分钟的头脑风暴,这两个数字可以包含在带有
abs()的表达式中
,我想到了你在答案的解释部分中看到的内容。正如你所看到的,我花了大约10分钟的时间,当我开始思考时,我根本不确定我是否能想出一个答案。我为自己感到自豪。没有几年的经验,我不希望做得这么好,但请再次确定只要你有足够的经验,你也能做到。