<tbody id='olg5p2jt'></tbody>
  • <small id='4oa5um1l'></small><noframes id='jtkaon00'>

  • 热门推荐
    注册开一元棋牌
    随时可以棋牌游戏:扑克牌算24的难度指数TOP10,你多久能通关吗?兼谈算法~-网上棋牌娱乐网
    注册开一元棋牌 2020-09-04 12:50

      算法是数学及其应用的重要组成部分,算法的思想贯穿整个高中数学的学习之中,对数学思想方法的理解和掌握其道至关重要的作用,由于算法思想的本质是程序化解题的思想,因此有利于培养学生思维的条理化、逻辑性以及构造性的解决数学问题的能力,同时还是进一步学习计算机科学技术的基础。下面通过一个简单的算24点游戏来探讨算法的学习。

      扑克牌算24点是一种非常方便开展并受欢迎的数学游戏, 特别是在计算机时代之前.

      随机的取出四张扑克牌(除去大、小王), 第一个用所有四张牌上的数值(A=1, J=11, Q=12, K=13),和基本的四则运算(+ -× , /) 算出24的玩家获胜.

      1.几个例子

      对于组合{1,2,3,4}

      我们可以找到几种解法: (3 + 2 + 1) × 4, 4 × 3 × 2 × 1, (4 + 2) × (3 + 1) 。有人可能会说4×(3+2+1)是另外一种独立的解法.可是我们认为应被视为雷同的步骤。

      也可能有些组合根本就无解。如 {1,1,1,1} 、{1,5,11,13} 无解。除非如果是脑筋急转弯 允许引进规则以外的运算, 那样的话, 我们有 (1!+1!+1!+1!)!=24, 或5^(13 - 11) - 1=24,当然这不在我们讨论范围内。

      2.牌型组合

      首先我们可能抽到的牌型组合(只考虑牌面点数,不考虑花色)有多少种可能呢?

      按抽到的4张牌相同点数牌的张数分成五种情况讨论,分别为 4、3+1、2+1+1、2+2、1+1+1+1 。

      1、取4个不同样的牌(1+1+1+1),

      2、取三样(2+1+1),

      3、取两样、每样取2个(2+2),

      4、某样取三个、另取一个(3+1),

      5、只取一样(4),

      所以累计可能出现的牌型有 715+858+78+156+13=1820种。

      那么问题来了,针对1820种牌型组合抽到的任一种牌型,我们如何判断是否能算出24,如果能算出,有哪些不重复的计算方式呢。

      好在我们有了计算机,借助计算程序,如何设计一种算法来实现呢?

      3.算法的设计

      输入:n1,n2,n3,n4

      输出:若能通过+ - * / 和括号混合运算,得到运算结果为24,则输出一个对应的运算表达式

      如何用程序简单实现找到算式是程序初学者关注的问题,网络有许多这样的文章,有递归法、回溯法、穷举法。

      但穷举法最为简单、易于理解。

      (1)穷举法:

      对4个数字全排列有4!=24种排列。

      4个数字之间共需要3个运算符,同一个运算符可以重复出现,则有4x4x4=64种情况。

      对于4个数字而言,共有以下5中加括号的方式:

      (A(B(CD))),(A((BC)D)),((AB)(CD)),((A(BC))D),(((AB)C)D)。

      所以遍历的表达式最多有24*64*5=7680种。

      对这组排列逐一进行运算,看是否是24,就可以得到最终所有式子了。在运算过程中除法的特殊性——除数不能为零。因为可能会用到除法,所以要考虑精度问题,通过结果减去24取绝对值与一个接近0的小数(如0.001)比较,如小于它,即可判定结果是24。

      以目前计算机的运算能力把1820*7680这么多表达式都计算一遍,应该是毫不费劲。

      应该注意的是,4个数字的穷举计算是有限的,尚可接受。如果参与计算的数字增多这种穷举构造法的复杂度至少是指数级的,因此不适用于数字较多的情况。

      (2)如何剔除雷同的计算组合

      任给一个可解的组合, 我们总是想得到 全部的解法. 计算机通过上述所有可能的组合遍历计算,会搜寻出所有可能的组合解答,但这其中有些解法是不同的, 有些则明显 等价, 有些则没有那么明显。如何在所有的等价解法中, 只给出一个代表. 选出最简约的那个解法. 就是我们程序算法中需要考虑的简化冗余的解法的理论”。

      简单搬运一下的高手总结的消除冗余雷同算式的规则:

      记号:

      a, b, c, d 是数字 (1,2,3 等), x, y, z, w 是表达式 如: 1, 1 + 2, (1 + 2 × 6) /5, 等. 如果两个表达式 x 和 y 等价, 则写做 x y, 比如: a + b b + a, a - (b - c) a + c - b 等. 如果两个表达式 x 和 y 等价,并且我们给予 y 优先权, 因为y更简约或者更易于人机交互, 则写做 x → y . 比如: a- (b - c) a + c - b , 不过我们给予后者优先权, 所以我们有 a - (b - c) → a + c - b± 是 + 或者 -, 同时 ×/ 是 × 或 /.

    随时可以棋牌游戏:扑克牌算24的难度指数TOP10,你多久能通关吗?兼谈算法~

      算数运算的等价关系

      这部分都是很基本的等价关系. 1 × 2 × 3 × 4 和 (4 × 3 × ( 2 × 1)) 明显完全一样,不过多数人会喜欢第一种解法,因为解法一比较简洁. 第一部分的规则可以用一句话概括:把数字换成变量, 如果两个表达式对于任意整数变量棋牌游戏赌钱都有一样的值, 那么这两个表达式等价. 例如: 对于组合 {1,2,3,4} 和以下两个表达式: (3 + 2 + 1) × 4 和 4 × (1 + 2 + 3) : , 我们先把 1 换作 a, 2 换作 b, 3 换作 c 同时 4 换作 d, 现在这两个表达式变为 (c + b + a) × d 和 d × ( a + b + c). 对任何的整数组合 {a,b,c,d}, 这两个表达式都有一样的值. 所以我们知道这两个表达式等价. 在 (3 + 2 + 1) × 4 和 4 × (1 + 2 + 3) 中, 我们更喜欢前者因为对某些人机交互系统它更简洁(还记得计算器吗?), 因为输入(3 + 2 + 1) × 4 无需输入括号. 也就是 4 × (1 + 2 + 3) → (3 + 2 + 1) × 4. 一个判断两个等价表达式优先权的通用规则是: 我们把比较复杂的部分放到左边. 在给出第一部分的具体规则之前, 我们需要最后一个注脚: 对表达式 x 和 y (别忘了 x 可以是 a + b), 当我们写出 x ×/ y, 如果需要的话,我们在 x 或 y 外面加上括号.

    随时可以棋牌游戏:扑克牌算24的难度指数TOP10,你多久能通关吗?兼谈算法~

      (1) 交换律:x ± y ± y + x x × y y × x x ×/ y ×/ z x ×/ z ×/ y 优先权 1: - 和 / 在最右边, 例如. - a + b → b - a, a / b × c → a × c / b 优先权 2: 复杂的表达式放在最左边, 例如. c + a × b → a × b + c, a × (b + c) → (b + c) × a ...

      (2) 结合律:x + y ± z ( x + y ) ± z x + (y ± z ) x × y ×/ z ( x × y ) ×/ z x × (y ×/ z ) ( x / y ) / z x / y / z 优先权: 括号比较少的, 比如: (a + b) + c → a + b + c, (a / b) / c → a / b / c .

      (3) + 和 - 的交换性, 以及 × 和 / 的交换性:x - (y - z) x + z - y x × z / y x/(y/z) x /(y × z) x/y/z 优先权: 括号比较少的, 例如. a - (b - c) → a + c - b, a/(c/b) → a × b / c

      (4) 减号越少越好:a - (b - c) ×/ d a + (c - b) ×/ d, 注意: 这条规则不被规则(3) 包含. 优先权: 通过规则 (3) 的优先权我们有: a - (b - c) ×/ d → (c - b) ×/ d + a

      (5)平局的情况: a × b × c × d 还是 d × c × b × a, (a + b) × (c + d) 还是 (d + c) × (a + b)? 优先权: 无所谓啦. 我喜欢大的数字在最左边, 也就是: 1 × 2 × 3 × 4 → 4 × 3 × 2 × 1, (1 + 2) × (5 + 3) → (5 + 3) × (2 + 1)

      表达式的值是 0 或 1 的特殊情况

      (6) 1 的 乘法/除法 : x × y x / y, 如果表达式 y 的值是 1.优先权: x × y, 例如: (13 + 11) / (5 - 4) → (13 + 11) × (5 - 4). 类似的: (12 + 6 × 2) / 1 → (12 + 6 × 2) × 1.

      (7) 表达式 × z 的位置, 当 z 的值是 1 的时候: 如果 z=1, 我们有: x + y × z x × z + y (x + y ) × z 优先权: (x + y ) × z 因为其对称性

      (8) 特别的组合 {a, b, c, c} : a × b × c /c a × b + c - c, 以及 ( a + b ) × c /c a + b + c - c .优先权: a × b + c - c 或者 a + b + c - c

      (8.b) 最后的组合 {a, b, 1, 1} : a × b × 1 × 1 a × b + 1 - 1, 以及 ( a + b ) × 1 × 1 a + b + 1 - 1 .优先权: a × b + 1 - 1 或者 a + b + 1 - 1

      (8.c) 游戏中有 24的情况 : 这种情况只有当你玩大游戏时,有24这种大的数字存在才有意义. 24 × x / y → 24 + x - y, 这里 x 和 y 是两个有同样值的表达式24 + a - b - c → 24 + b + c - a24 + c - x 比 x + 24 - c 有优先级棋牌血流成河打钱, 这里 x 是一个有两个数字的表达式, 当然 c 和 x 有同样的值. 这三条看起来很随意的规则减少了许多多余的解法当24在游戏之中。

      (8.d) 游戏中有 23 或者 25的情况 : 这种情况只有当你玩大游戏时,有23,25这种大的数字存在才有意义. 如果这四个数是 23 a b c=a+b 那么我们有下面2个解法:c/(a+b) + 23 (a+b)/c + 23(a+b)/c + 23 比 c/(a+b) + 23 有优先级. 同理 25 - (a+b)/c 有优先级.

      因此得到算法:

      通过穷举构造所有的数字算式;筛选出计算结果是24的算式;将算式中的数字用符号替换,并对得到的代数式做等价判断,每个等价类选出一个代表;输出代表代数式对应的数字算式。具体的程序设计网络上有很多介绍,就不引用赘述了。通过计算机程序,给出结论:

      1820种牌型组合中,有1362组可以算出24,高达74.8%的牌型是能得出答案的。

      在总共 1362 个可解组合中, 通过计算机找到了 3017 个独立解。

      515 个可解组合有 1 个独立解;427 个可解组合有 2 个独立解;216 个可解组合有 3 个独立解;125 个可解组合有 4 个独立解;031 个可解组合有 5 个独立解;017 个可解组合有 6 个独立解;017 个可解组合有 7 个独立解;008 个可解组合有 8 个独立解;002 个可解组合有 9 个独立解;003 个可解组合有 10 个独立解;而(2 4 8 10) 有 11 个独立解,是有有着最多的不同计算方法的。

      最后,请大家开动脑筋来解答TOP10的算24组合,你用多久可以算出来?

      {2,3,8,13};

      {4,8,8,11};

      {1,8,12,12};

      {5,5,7,11};

      {3,6,6,11};

      {2,5,5,10};

      {3,3,8,8};

      {1,3,4,6};

      {1,4,5,6};

      {2,3,5,12}.

      欢迎大家给出答案

    我们 神来棋牌 棋牌送3 棋牌套路 组合 表达式 优先权 网上棋牌娱乐网

    <small id='e03cgcoa'></small><noframes id='izx7sdw4'>

      <tbody id='o0osuh8k'></tbody>
  • <small id='2yolo3q9'></small><noframes id='q7mg30fw'>

      <tbody id='1mh3l898'></tbody>