突然想写一个算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(倒序)