介绍
这是我最喜欢的数学难题之一。
给定一个数字(例如3)和使用该数字的次数(例如5),请生成10个表达式,仅使用+即可得出1、2、3、4、5、6、7、8、9和10 -,×,÷,^和√(根)(允许使用括号将操作分组)。
例如:
(3^3 + 3)/(3 + 3) = (33 - 3)/(3 + 3) = 3 + 3/3 + 3/3 = 5
请注意,以上所有方法均使用5个3和数学运算并将结果求和为5。您也可以在√之前使用3表示立方根。对于在√之前使用4表示第四个根,也是如此。
另请注意,可以使用两个3来形成33,或者可以使用三个3来形成333,依此类推。
挑战
- 您将获得两个数字(范围从1到5)作为函数参数,STDIN或命令行参数。
- 第一个数字表示要使用哪个数字,第二个数字表示要在表达式中使用该数字的次数。
- 您的程序应输出大小为10(或10个以空格分隔的数字)的数组,其中每个元素表示是否
(index + 1)
可以使用真/假值来计算(仅使用允许的运算符)得出该数字的数学表达式。
例如,如果输入是
1 3
然后输出应该是
[1, 1, 1, 0, 0, 0, 0, 0, 0, 1]
因为只能使用三个1来表示1、2、3和10。
得分了
- 这是一个代码高尔夫球,因此以字节为单位的最小代码长度为准。
奖金
全部列印[−50]
如果输出数组元素等于合理组合的总数,则从您的分数中减去50以获取该(index + 1)
值,而不是真实值或虚假值。
例如,如果只有3个可能的组合,即5个3的结果为5,则输出数组的第 4 个条目应为3。
极限数学[−100]
如果输出数组元素包含至少一个导致该(index + 1)
值的实际表达式,则从您的分数中减去100 。
例如,如果使用五个3的,输出阵列的4 个条目可以是(3^3 + 3)/(3 + 3)
,(33 - 3)/(3 + 3)
或3 + 3/3 + 3/3
过度杀伤力[−200]
如果输出数组元素包含所有可能的组合(用分隔|
),则从您的分数中减去200 。该奖金被添加到Extreme Maths奖金的顶部,因此您总共获得−300。
例如,如果使用五个3,则输出数组的第 4 个元素应为(3^3 + 3)/(3 + 3)|(33 - 3)/(3 + 3)|3 + 3/3 + 3/3
注意:要获得相同结果的任何两个表达式在逻辑上都应该采用不同的方法来区别。
例如,使用五个3来获得5 3 + 3/3 + 3/3
等于3/3 + 3 + 3/3
或3/3 + 3/3 + 3
因为它们每个都采用相同的方法。(3^3 + 3)/(3 + 3)
并(33 - 3)/(3 + 3)
有所不同,因为分子中的30是通过不同的方法实现的。
更新:经过所有答案后,发现由于一元-
和√ 的极端情况,所有答案都有缺陷。因此,就涉及答案的完整性而言,认为遗漏那些极端情况是可以的。
这是一个棘手的问题,但很有趣。
打高尔夫球快乐!
1
s 就得到10 ?