用穷举法列出24点的解


大家都玩过24点的游戏吧,这里介绍一种24点游戏的解法,用穷举法来搜索出24点的所有解。

1. 游戏规则
     .给定4个1-9的整数,对它们进行四则运算,寻找能得到24点的表达式,注意数的位置不能改变。

2. 题目分析
      4个整数进行四则运算有4*4*4 = 64种可能的解,把运算规则全穷举出来实际上并不复杂,关键是如何穷举。我们可以用3个整形变量来表示运算符号,用它们的值1234来表示+-*/,这样用3个for循环就可以穷举出所有解了,另外考虑到乘除法和加减法混合的运算顺序问题,需要判断运算优先级。用计算模型的函数来表示,有以下4种可能([]表示符号,o表示数字)
      (1)  o[]o[]o[]o
      (2)  o[] (o[]o) []o
      (3) o[]o[] (o[]o)
      (4)  o[]( (o[]o) []o)   
我们可以用引入乘除法符号的个数多少来考虑相应的运算优先级
       (1)没有乘除:从左到右运算,为第(1)种
       (2)有一个乘除,考虑其位置前面(1)、中间(2)、后面(3)
       (3)有两个乘除,考虑位置组合(1)(2)(3)(4)都可能
       (4)有三个乘除,第(1)种
3. C语言程序
http://download.csdn.net/my 之C语言程序 解决24点

4. 游戏加一种规则
    以上规则不变,再加规则:可以用括号任意改变其优先级
5. 加一种的分析
     加括号之后运算情况多了一种
        o[](o[] (o[]o))
     (不加括号只有乘除的情况下这种规则不可能出现)
     并且其运算不再依赖于乘除法的优先级高于加减法,而是由小括号决定,所以我们为了简化算法,在每一种情况下加上小括号,源程序如下。
http://download.csdn.net/my  之 24点的C语言程序
      
6 .拓展考虑两个问题
    (1)如果可以改变4个数字的顺序,算法应该如何改?
    (2)如何简化加括号之后的算法?(加括号之后有4*4*4*5=320种情况,实际上有许多重复的情况可以简化)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值