24点算法进度1

时间:2021-05-10 10:17:37

突然想写一个算24的程序,昨晚弄到晚上4点,在分析存在多少种情况,虽然可能对编程的作用不大,只是想考验一下自己的数学功底,将我写的笔记放到下面,估计很多人看了脑袋晕,不过我还算清晰,未完:

 

模式(运算先后顺序):

五种:a1b2c3d

A:(a1b)2(c3d) 1-3-2(3-1-2)

B:((a1b)2c)3d 1-2-3

C:(a1(b2c))3d 2-1-3

D:a1((b2c)3d) 2-3-1

E:a1(b2(c3d)) 3-2-1

两边数字能交换:+,* 1

两边数字不能交换:-,/ 0

 

弱运算:+,- 1

强运算:*,/ 0

 

所以:

00 /

01 -

10 *

11 +

 

mode:lmn|xyz 模式:交换性|强弱性

mode 决定括号情况

lx 决定1位符号

my 决定2位符号

nz 决定3位符号

C:011|101 a-b*c+d

A:011|101 (a-b)*(c+d)

 

模式变化(去括号)规律: (1)模式变化前后xyz不变(去括号后运算的强弱不变,同级变化);

(2)A模式下,包含3的括号是否可以去掉取决于yz是否相同(强弱同级),去掉后n是否改变取决于m的交换性(可交换则不变),去括号后变为B模式,A=>B;

(3)B模式不会变化,B=>B;

(4)C模式下,包含2的括号是否可以去掉取决于xy是否相同(强弱同级),去掉后m是否改变取决于l的交换性(可交换则不变),去括号后变为B模式。C=>B;

(5)D模式不会变化,D=>D;

(6)E模式下,包含3的括号是否可以去掉取决于yz是否相同(强弱同级),去掉后n是否改变取决于m的交换性(可交换则不变),去括号后变为D模式,E=>D;

A:010|111=B:010|111

C:010|001=B:000|001

E:000|011=D:001|011

综上所述,去括号后:A模式有8*4=32种;B模式有8*8=64种;C模式有8*4=32中;D模式有8*8=64种;E模式有8*4=32种。

 

模式变化(交换性执行后)规律:

(1)A模式交换后模式不变,A==>A

(2)B模式下,l不改变模式;若m为1,可变为C模式,变为C:mln(交换);若n为1,可变为D模式,变为D:nlm(右轮转);若m和n都为1,可变为E模式,变为E:nml(倒序)

(3)C模式下,若l为1,可变为B模式,变为B:mln(交换);m不改变模式;若n为1,可变为E模式,变为E:nlm(右轮转);若l和n都为1,可变为D模式,变为D:nml(倒序)

(4)D模式下,若l为1,可变为B模式,变为B:mnl(左轮转);m不改变模式;若n为1,可变为E模式,变为E:lnm(交换);若l和n都为1,可变为C模式,变为C:nml(倒序)

(5)E模式下,若l为1,可变为C模式,变为C:mnl(左轮转);若m为1,可变为D模式,变为D:lnm(交换);n不改变模式;若l和m都为1,可变为B模式,变为B:nml(倒序)