Answer

问题及解答

算廿四

Posted by haifeng on 2019-08-27 00:01:23 last update 2019-08-27 00:01:23 | Edit | Answers (1)

Calculator

功能: 算廿四

描述: 即使用 +,-,*,/,(,) 将四个数(一般指正整数, 并且传统上限制不超过10)组成一个算式, 使其结果为24.

函数: eq24(a,b,c,d)

返回: 所有能计算出24的算式

 

请问总共有多少种不同的算式?

 

注意, 这里要找的是本质上不同的算式,

比如 a-b+c 与 a-(b-c) 虽然形式上不同, 但本质上是同一个算式.

 

1

Posted by haifeng on 2019-08-27 13:00:43

以下是分析

 

算法:

能表示的算式有下面几类:

一、

(        )+d==24    (1)
(        )-d==24    (2)
(        )*d==24    (3)
(        )/d==24    (4)

由于加法和乘法具有交换律, 故只有(2)和(4)需要考虑下面的情形:

d-(        )==24    (2')
d/(        )==24    (4')

二、

(    )+(    )==24
(    )-(    )==24
(    )*(    )==24
(    )/(    )==24

对于一, 相当于考虑 a,b,c 在加减乘除下所有可能的算式表达式
对于二, 所有的二元表达式, 不过要注意的是 a,b,c,d 不能重复.


a+b+c    | a-b+c     | a*b+c   | a/b+c
a+b-c    | a-b-c     | a*b-c   | a/b-c
a+b*c    | a-b*c     | a*b*c   | a/b*c
a+b/c    | a-b/c     | a*b/c   | a/b/c
(a+b)*c    | (a-b)*c| a*(b+c) | a/(b+c)
(a+b)/c    | (a-b)/c| a*(b-c) | a/(b-c)


二、

(a+b)+(c+d) | (a-b)+(c+d) | (a*b)+(c+d) | (a/b)+(c+d)
(a+b)+(c-d) | (a-b)+(c-d) | (a*b)+(c-d) | (a/b)+(c-d)
(a+b)+(c*d) | (a-b)+(c*d) | (a*b)+(c*d) | (a/b)+(c*d)
(a+b)+(c/d) | (a-b)+(c/d) | (a*b)+(c/d) | (a/b)+(c/d)

不过, 注意到
(a+b+c)+d 与 (a+b)+(c+d) 是等价的
(a/b+c)+d 与 (a/b)+(c+d) 是等价的.

因此, 二可以缩减为

(a+b)+(c*d) | (a-b)+(c*d) | (a*b)+(c*d) | (a/b)+(c*d)
(a+b)+(c/d) | (a-b)+(c/d) | (a*b)+(c/d) | (a/b)+(c/d)


粗略估计, 共24*6+8*4=144+32=176种
==========================================================


(a+b+c)+d    | (a-b+c)+d     | (a*b+c)+d   | (a/b+c)+d
(a+b-c)+d    | (a-b-c)+d     | (a*b-c)+d   | (a/b-c)+d
(a+b*c)+d    | (a-b*c)+d     | (a*b*c)+d   | (a/b*c)+d
(a+b/c)+d    | (a-b/c)+d     | (a*b/c)+d   | (a/b/c)+d
((a+b)*c)+d    | ((a-b)*c)+d     | (a*(b+c))+d | (a/(b+c))+d
((a+b)/c)+d    | ((a-b)/c)+d     | (a*(b-c))+d | (a/(b-c))+d

-------------------------------------------------------------

(a+b+c)-d    | (a-b+c)-d     | (a*b+c)-d   | (a/b+c)-d
(a+b-c)-d    | (a-b-c)-d     | (a*b-c)-d   | (a/b-c)-d
(a+b*c)-d    | (a-b*c)-d     | (a*b*c)-d   | (a/b*c)-d
(a+b/c)-d    | (a-b/c)-d     | (a*b/c)-d   | (a/b/c)-d
((a+b)*c)-d    | ((a-b)*c)-d     | (a*(b+c))-d | (a/(b+c))-d
((a+b)/c)-d    | ((a-b)/c)-d     | (a*(b-c))-d | (a/(b-c))-d

-------------------------------------------------------------

(a+b+c)*d    | (a-b+c)*d     | (a*b+c)*d   | (a/b+c)*d
(a+b-c)*d    | (a-b-c)*d     | (a*b-c)*d   | (a/b-c)*d
(a+b*c)*d    | (a-b*c)*d     | (a*b*c)*d   | (a/b*c)*d
(a+b/c)*d    | (a-b/c)*d     | (a*b/c)*d   | (a/b/c)*d
((a+b)*c)*d    | ((a-b)*c)*d     | (a*(b+c))*d | (a/(b+c))*d
((a+b)/c)*d    | ((a-b)/c)*d     | (a*(b-c))*d | (a/(b-c))*d

-------------------------------------------------------------

(a+b+c)/d    | (a-b+c)/d     | (a*b+c)/d   | (a/b+c)/d
(a+b-c)/d    | (a-b-c)/d     | (a*b-c)/d   | (a/b-c)/d
(a+b*c)/d    | (a-b*c)/d     | (a*b*c)/d   | (a/b*c)/d
(a+b/c)/d    | (a-b/c)/d     | (a*b/c)/d   | (a/b/c)/d
((a+b)*c)/d    | ((a-b)*c)/d     | (a*(b+c))/d | (a/(b+c))/d
((a+b)/c)/d    | ((a-b)/c)/d     | (a*(b-c))/d | (a/(b-c))/d

-------------------------------------------------------------

d-(a+b+c)    | d-(a-b+c)     | d-(a*b+c)   | d-(a/b+c)
d-(a+b-c)    | d-(a-b-c)     | d-(a*b-c)   | d-(a/b-c)
d-(a+b*c)    | d-(a-b*c)     | d-(a*b*c)   | d-(a/b*c)
d-(a+b/c)    | d-(a-b/c)     | d-(a*b/c)   | d-(a/b/c)
d-((a+b)*c)    | d-((a-b)*c)     | d-(a*(b+c)) | d-(a/(b+c))
d-((a+b)/c)    | d-((a-b)/c)     | d-(a*(b-c)) | d-(a/(b-c))

-------------------------------------------------------------

d/(a+b+c)    | d/(a-b+c)     | d/(a*b+c)   | d/(a/b+c)
d/(a+b-c)    | d/(a-b-c)     | d/(a*b-c)   | d/(a/b-c)
d/(a+b*c)    | d/(a-b*c)     | d/(a*b*c)   | d/(a/b*c)
d/(a+b/c)    | d/(a-b/c)     | d/(a*b/c)   | d/(a/b/c)
d/((a+b)*c)    | d/((a-b)*c)     | d/(a*(b+c)) | d/(a/(b+c))
d/((a+b)/c)    | d/((a-b)/c)     | d/(a*(b-c)) | d/(a/(b-c))

-------------------------------------------------------------

(a+b)+(c*d) | (a-b)+(c*d) | (a*b)+(c*d) | (a/b)+(c*d)
(a+b)+(c/d) | (a-b)+(c/d) | (a*b)+(c/d) | (a/b)+(c/d)

-------------------------------------------------------------

(a+b)-(c*d) | (a-b)-(c*d) | (a*b)-(c*d) | (a/b)-(c*d)
(a+b)-(c/d) | (a-b)-(c/d) | (a*b)-(c/d) | (a/b)-(c/d)

-------------------------------------------------------------

(a+b)*(c*d) | (a-b)*(c*d) | (a*b)*(c*d) | (a/b)*(c*d)
^^^^^^^^^^^   ^^^^^^^^^^^   ^^^^^^^^^^^   ^^^^^^^^^^^
(a+b)*(c/d) | (a-b)*(c/d) | (a*b)*(c/d) | (a/b)*(c/d)
^^^^^^^^^^^   ^^^^^^^^^^^   ^^^^^^^^^^^   ^^^^^^^^^^^
-------------------------------------------------------------

(a+b)/(c*d) | (a-b)/(c*d) | (a*b)/(c*d) | (a/b)/(c*d)
^^^^^^^^^^^   ^^^^^^^^^^^   ^^^^^^^^^^^   ^^^^^^^^^^^
(a+b)/(c/d) | (a-b)/(c/d) | (a*b)/(c/d) | (a/b)/(c/d)
^^^^^^^^^^^   ^^^^^^^^^^^   ^^^^^^^^^^^   ^^^^^^^^^^^


-------------------------------------------------------------

其中等价的有
((a+b)*c)*d == (a+b)*(c*d)
((a+b)/c)*d == (a+b)/c/d

((a-b)*c)*d == (a-b)*(c*d)
(a/b*c)*d   == (a/b)*(c*d)

((a+b)*c)/d == (a+b)*(c/d)
((a-b)*c)/d == (a-b)*(c/d)
(a*b*c)/d   == (a*b)*(c/d)
(a/b*c)/d   == (a/b)*(c/d)

((a+b)/c)/d == (a+b)/(c*d)
((a-b)/c)/d == (a-b)/(c*d)
((a*b)/c)/d == (a*b)/(c*d)

((a-b)/c)*d == (a-b)/(c/d)
(a*b/c)*d   == (a*b)/(c/d)

(a*b*c)*d == (a*b)*(c*d)
(a/b/c)/d == (a/b)/(c*d)
(a/b/c)*d == (a/b)/(c/d)


因此, 共24*6+8*2=144+16=160种


另一方面, 某些式子可以看成是之前(一)中式子的轮换式
(a+b)+(c*d) == a + (b+c*d) == (c*d+b)+a
(a-b)+(c*d) == a - b+c*d   == (c*d-b)+a
(a+b)+(c/d) == a+b+c/d     == (c/d+b)+a
(a-b)+(c/d) == a-b+c/d     == (c/d-b)+a
(a+b)-(c*d) == (b-c*d)+a
(a-b)-(c*d) == (a-c*d)-b
(a+b)-(c/d) == (b-c/d)+a
(a-b)-(c/d) == (a-c/d)-b


============================================================
总结要计算的所有式子
====================

第二类(共计 (C_4^2)/2+P_4^2+P_4^4=3+12+24=39)
======

(a*b)+(c*d)
(a*c)+(b*d)
(a*d)+(b*c)
-----------
(a/b)+(c*d)
(a/c)+(b*d)
(a/d)+(b*c)
(b/a)+(c*d)
(b/c)+(a*d)
(b/d)+(a*c)
(c/a)+(b*d)
(c/b)+(a*d)
(c/d)+(a*b)
(d/a)+(b*c)
(d/b)+(a*c)
(d/c)+(a*b)
-----------
(a/b)+(c/d)
(a/b)+(d/c)
(a/c)+(b/d)
(a/c)+(d/b)
(a/d)+(b/c)
(a/d)+(c/b)
-----
(b/a)+(c/d)
(b/a)+(d/c)
(b/c)+(a/d)
(b/c)+(d/a)
(b/d)+(a/c)
(b/d)+(c/a)
-----
(c/a)+(b/d)
(c/a)+(d/b)
(c/b)+(a/d)
(c/b)+(d/a)
(c/d)+(a/b)
(c/d)+(b/a)
-----
(d/a)+(b/c)
(d/a)+(c/b)
(d/b)+(a/c)
(d/b)+(c/a)
(d/c)+(a/b)
(d/c)+(b/a)
------------

 

第一类 (共计231个式子)

>> 23+6+12+24+6+4+12+12+12+12+12+24+12+12+24+24==231

a+b+c+d

a-b+c+d
a-c+b+d
a-d+b+c
b-a+c+d

a*b+c+d
a*c+b+d
a*d+b+c
b*c+a+d
b*d+a+c
c*d+a+b

a/b+c+d
b/a+c+d
a/c+b+d
c/a+b+d
a/d+b+c
d/a+b+c
b/c+a+d
c/b+a+d
b/d+a+c
d/b+a+c
c/d+a+b
d/c+a+b

-----------

a-b-c+d
a-b+c-d
a+b-c-d
b-a-c+d
b-a+c-d
c-a-b+d
-----------

a*b-c+d
a*b-d+c
a*c-b+d
a*c-d+b
a*d-b+c
a*d-c+b
b*c-a+d
b*c-d+a
b*d-a+c
b*d-c+a
c*d-a+b
c*d-b+a
-----------

a/b-c+d
a/b-d+c
b/a-c+d
b/a-d+c
----
a/c-b+d
a/c-d+b
c/a-b+d
c/a-d+b
----
a/d-b+c
a/d-c+b
d/a-b+c
d/a-c+b
----
b/c-a+d
b/c-d+a
c/b-a+d
c/b-d+a
----
b/d-a+c
b/d-c+a
d/b-a+c
d/b-c+a
----
c/d-a+b
c/d-b+a
d/c-a+b
d/c-b+a
-------------
a+b-c*d
a+c-b*d
a+d-b*c
b+c-a*d
b+d-a*c
c+d-a*b
-------------
b*c*d+a
a*c*d+b
a*b*d+c
a*b*c+d
-------------
a*b/c+d
a*b/d+c
a*c/b+d
a*c/d+b
a*d/b+c
a*d/c+b
b*c/a+d
b*c/d+a
b*d/a+c
b*d/c+a
c*d/a+b
c*d/b+a
-------------
a+b+c/d
a+b+d/c
a+c+b/d
a+c+d/b
a+d+b/c
a+d+c/b
b+c+a/d
b+c+d/a
b+d+a/c
b+d+c/a
c+d+a/b
c+d+b/a
-------------
a+b-c/d
a+b-d/c
a+c-b/d
a+c-d/b
a+d-b/c
a+d-c/b
b+c-a/d
b+c-d/a
b+d-a/c
b+d-c/a
c+d-a/b
c+d-b/a
-------------
a/(b*c)+d      == a/b/c+d
a/(b*d)+c
a/(c*d)+b
b/(a*c)+d
b/(a*d)+c
b/(c*d)+a
c/(a*b)+d
c/(a*d)+b
c/(b*d)+a
d/(a*b)+c
d/(a*c)+b
d/(b*c)+a
-------------
a*(b+c)+d      形如 ((a+b)*c)+d
a*(b+d)+c
a*(c+d)+b
b*(a+c)+d
b*(a+d)+c
b*(c+d)+a
c*(a+b)+d
c*(a+d)+b
c*(b+d)+a
d*(a+b)+c
d*(a+c)+b
d*(b+c)+a
-------------
a*(b-c)+d      形如 ((a-b)*c)+d
a*(c-b)+d
a*(b-d)+c
a*(d-b)+c
a*(c-d)+b
a*(d-c)+b
b*(a-c)+d
b*(c-a)+d
b*(a-d)+c
b*(d-a)+c
b*(c-d)+a
b*(d-c)+a
c*(a-b)+d
c*(b-a)+d
c*(a-d)+b
c*(d-a)+b
c*(b-d)+a
c*(d-b)+a
d*(a-b)+c
d*(b-a)+c
d*(a-c)+b
d*(c-a)+b
d*(b-c)+a
d*(c-b)+a
----------------
形如 (a/(b+c))+d
a/(b+c)+d
a/(b+d)+c
a/(c+d)+b
b/(a+c)+d
b/(a+d)+c
b/(c+d)+a
c/(a+b)+d
c/(a+d)+b
c/(b+d)+a
d/(a+b)+c
d/(a+c)+b
d/(b+c)+a
----------------
形如((a+b)/c)+d
(a+b)/c+d
(a+b)/d+c
(a+c)/b+d
(a+c)/d+b
(a+d)/b+c
(a+d)/c+b
(b+c)/a+d
(b+c)/d+a
(b+d)/a+c
(b+d)/c+a
(c+d)/a+b
(c+d)/b+a
----------------
形如((a-b)/c)+d
(a-b)/c+d
(a-b)/d+c
(b-a)/c+d
(b-a)/d+c
(a-c)/b+d
(a-c)/d+b
(c-a)/b+d
(c-a)/d+b
(a-d)/b+c
(a-d)/c+b
(d-a)/b+c
(d-a)/c+b
(b-c)/a+d
(b-c)/d+a
(c-b)/a+d
(c-b)/d+a
(b-d)/a+c
(b-d)/c+a
(d-b)/a+c
(d-b)/c+a
(c-d)/a+b
(c-d)/b+a
(d-c)/a+b
(d-c)/b+a
---------------
形如(a/(b-c))+d
a/(b-c)+d
a/(c-b)+d
a/(b-d)+c
a/(d-b)+c
a/(c-d)+b
a/(d-c)+b
b/(a-c)+d
b/(c-a)+d
b/(a-d)+c
b/(d-a)+c
b/(c-d)+a
b/(d-c)+a
c/(a-b)+d
c/(b-a)+d
c/(a-d)+b
c/(d-a)+b
c/(b-d)+a
c/(d-b)+a
d/(a-b)+c
d/(b-a)+c
d/(a-c)+b
d/(c-a)+b
d/(b-c)+a
d/(c-b)+a
----------------