【问题标题】:Creating a function that outputs the largest value of a list of two numbers using only basic operators创建一个仅使用基本运算符输出两个数字列表的最大值的函数
【发布时间】:2016-09-21 21:48:47
【问题描述】:

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

【问题讨论】:

  • 请贴出你目前写的代码,指出难点

标签: computer-science racket-student-languages


【解决方案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

说明:

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

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

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

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

实施:

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

【讨论】:

  • 如果你的老师要求你为三个数字的列表实现这个,那么你会遇到麻烦。
  • 非常感谢!这是一个很大的帮助,我想知道您是否可以分享您的思维过程,以便我可以更好地理解并下次自己获得它?我在猜测和检查各种随机函数,所以显然这不是一个好方法......我只是想知道你的。
  • 我的思考过程始于 abs() 必须发挥主要作用,因为为了对两个数字进行排序,您需要一个 if,并且从可用的操作 abs() 是只有一个具有内置类型if。然后我选择了两个数字,8 和 10,用各种不同的方式进行了几分钟的头脑风暴,使这两个数字可以包含在 abs() 的表达式中,我想出了你在答案的解释部分看到的内容。
  • 如您所见,我花了大约 10 分钟,当我开始考虑这个问题时,我完全不确定自己能否找到答案。我为自己感到非常自豪。不要指望没有几年的经验就能做得很好,但要再次确定,只要有足够的经验,你也可以做到。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-11
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 2022-11-28
  • 1970-01-01
相关资源
最近更新 更多