怎么用“枚举法”解决24点问题?

2025-11-05 09:30:37

1、给定五个数字:

A={5,6,3,8,9}

怎么用“枚举法”解决24点问题?

2、准备四个运算符号。

注意,运算符号可以重复。

怎么用“枚举法”解决24点问题?

3、用B和A的后四个元素,可以做成一个二维列表:

{B, A[[2 ;; 5]]}

这是一个形式上的2*4的矩阵,尽管里面的元素不是数字。

怎么用“枚举法”解决24点问题?

4、转置一下,就得到4*2的形式矩阵:

{B, A[[2 ;; 5]]} // Transpose;

展开为一维列表,可以发现,运算符号和数字是交错排列的:

{B, A[[2 ;; 5]]} // Transpose//Flatten

怎么用“枚举法”解决24点问题?

5、在开头加上A的第一个元素,就得到一个“算式”:

{A[[1]], {B, A[[2 ;; 5]]} // Transpose} // Flatten

只不过被“逗号”隔开了。

怎么用“枚举法”解决24点问题?

6、看看,StringJoin能不能把上面的“算式”串起来?——:

{A[[1]], {B, A[[2 ;; 5]]} // Transpose} // Flatten // StringJoin

结果会报错,提示“算式”里面的数字,不是字符串的形式。

怎么用“枚举法”解决24点问题?

7、需要把“算式”里面的所有元素,全部转化为字符串的形式,然后才能串起来:

ToString[#] & /@ ({A[[1]], {B, A[[2 ;; 5]]} // Transpose} // 

    Flatten) // StringJoin

得到的式子,还是一个字符串的形式,不是真正意义上的算式。

怎么用“枚举法”解决24点问题?

8、如果需要计算这个式子,需要转化为表达式:

% // ToExpression

结果是85/18≠24,所以,这个式子,不是我们要寻找的算式。

怎么用“枚举法”解决24点问题?

1、A里面的数字,可以有若干不同的排列方法:

b = Permutations[A];

怎么用“枚举法”解决24点问题?

2、运算符号允许重复出现:

a = Tuples[{"+", "-", "*", "/"}, 4];

怎么用“枚举法”解决24点问题?

3、用b里面的每一种排列方法,配套a里面的某个运算法则,就得到很多表达式;

用if语句判断,如果表达式等于24,就保留字符串形式的算式,否则写为0;

用Union把重复的式子(主要是0)去掉;

把0(一般会位于开头)去掉。

怎么用“枚举法”解决24点问题?

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢