`
freizl
  • 浏览: 3911 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

算24点

阅读更多
简单的 bruce force, 算法如下, 未能证明其正确性.
给定一组数据 (1,2,3,4) 和 操作符 (-,+,*)
则有两种可能结果

((1-2) + 3) * 4
((1-2) * (3+4))

再通过排列 给定的数据和操作符 来重复上述操作

请大家指点指点
- 代码语法等方面如何改进
- 算法上是否正确、如何改进
- 其他

谢谢!

#!/usr/bin/python

from __future__ import division
import os

# cant use: y == 0 and 0 or x / y
# because 0 eval to false, thus when y==0, it still performs x/y
def div (x,y):
    if y==0: return 0
    return x / y

operation = {'+' : lambda x,y : x + y,
             '-' : lambda x,y : x - y,
             '*' : lambda x,y : x * y,
             '/' : lambda x,y : div(x,y)}

all_ops = operation.keys()

all_number_cand = (1,2,3,4,5,6,7,8,9,10)

def op_perm (ops=all_ops):
    return [(i,j,k) for i in ops for j in ops for k in ops]

def number_perm (numbers=all_number_cand):
    return [(i,j,k,l) for i in numbers for j in numbers for k in numbers for l in numbers]

### TODO increase the performace, it takes 10s
def main ():
    result = []

    for n_tuple in number_perm():
        for o_tuple in op_perm():
            o_stack = list(o_tuple)
            n_stack = list(n_tuple)
            n_queue = list(n_tuple)
            while o_stack:
                op = operation[o_stack.pop()]
                n_stack.append(op(n_stack.pop(), n_stack.pop()))
                n_queue.insert(0, op(n_queue.pop(), n_queue.pop()))
            if 24 in n_stack or 24 in n_queue:
                result.append((' ').join([str(n_tuple),str(o_tuple),str(n_stack),str(n_queue)]))

    file = open('cal_res.txt','a')
    for item in result:
        file.writelines(item + os.linesep)
    file.close()

if __name__=='__main__':
    open('cal_res.txt','wb').write('') # any quick method?
    main()
分享到:
评论

相关推荐

    VB 算24点(含源码)

    `算24点vbp.vbp`是工程文件,记录了项目的基本信息和引用库,`算24点vbp.vbw`则是工程工作区文件,存储了用户的窗口位置和大小等设置。而`经典24.txt`可能是用于存储一些经典的24点问题或游戏规则的文本文件。 通过...

    给你四张牌,算初24点

    而"算24点"可能是程序源代码,可能是用Python、Java、C++等语言实现的24点计算程序,通过读取四张牌的值,然后运行程序,输出所有可能的解。 学习和理解24点算法不仅有助于提升数学技能,还能培养编程思维。通过...

    c#算24点源码

    在C#编程环境中,开发一个"算24点"的游戏是一项有趣的挑战,它涉及到算法设计、用户界面(UI)创建以及基本的数学逻辑。在这个游戏中,我们移除了扑克牌中的大小王、K、Q、J,并将A视为1,10视为0。每轮游戏,两个...

    vb 类似扑克牌算24点小游戏 源代码

    标题中的“vb 类似扑克牌算24点小游戏 源代码”指的是使用Visual Basic (VB)编程语言开发的一个小型游戏程序,该游戏模仿了经典的扑克牌24点游戏。在这个游戏中,玩家需要从四张随机抽取的扑克牌中,通过加、减、乘...

    算24点比赛软件

    《算24点比赛软件详解》 算24点,是一项经典的数学智力游戏,它源自中国,考验玩家的计算能力和逻辑思维。在这个数字化时代,算24点比赛软件应运而生,为爱好者们提供了全新的竞技平台。本文将详细介绍算24点比赛...

    vb写的算24点

    标题“vb写的算24点”指的是使用Visual Basic(VB)编程语言编写的程序,用于解决经典的数学游戏——24点。24点游戏的基本规则是:从一副扑克牌(去掉大小王)中随机抽出四张牌,用加、减、乘、除、括号等运算方法,...

    matlab巧算24点-make24.m

    matlab巧算24点-make24.m 使用举例 >> make24; 1 2 3 4 --> 4*3*2*1 >> make24; 1 5 5 5 --> *5 更多的例子 >> for i=1:10 make24); end 11 3 3 9 --> *9/3 12 7 10 2 --> 12*...

    算24点游戏,智力游戏

    《算24点游戏:智力挑战与算法解析》 算24点游戏,作为一个历史悠久的智力游戏,深受人们喜爱,尤其对于提升心算能力和逻辑思维能力具有显著效果。游戏的基本规则是,从1到13这13个数字中随机抽取四个,通过加、减...

    算24点C语言源码 算法设计

    算24点游戏是一种智力游戏,玩家需要通过加、减、乘、除四种基本运算以及括号来改变运算顺序,使得四张扑克牌上的数字(1至9之间)运算后得到24。 首先,我们需要理解问题的核心:给定四个1到9之间的自然数,我们的...

    游戏-算24点

    标题中的“游戏-算24点”指的是一个基于C++编程语言开发的多媒体游戏,它的主要目的是通过数学逻辑和计算技巧来解决算24点的问题。这个游戏通常包含一副扑克牌,从中随机抽出四张,玩家的目标是利用加、减、乘、除...

    算24点 算法经典 回溯法

    在计算机科学中,算24点是一种基于数学和逻辑思维的游戏,玩家需要通过加、减、乘、除运算,以及括号的使用,使得四张扑克牌上的数字组合运算后得到24。这种问题的解决方法之一就是采用算法中的回溯法。 回溯法是一...

    巧算二十四点生活中的数学PPT教案.pptx

    【巧算二十四点】是一种经典的数学游戏,旨在通过加、减、乘、除以及使用括号,将四张扑克牌上的数字组合成24。这个游戏不仅锻炼玩家的数学思维和逻辑推理能力,还提升了快速计算的技能。在这个过程中,掌握一定的...

    算24点 java 编译成exe

    标题中的“算24点”是指一种数学游戏,玩家需要使用四张扑克牌上的数字,通过加、减、乘、除、括号等运算来得到结果24。在这个上下文中,我们讨论的是一个使用Java编程语言开发的GUI(图形用户界面)程序,它实现了...

    24点速算,用来算24点游戏的结果

    24点速算,用来算24点游戏的结果,24点速算,用来算24点游戏的结果

    delphi 7算24点

    《Delphi 7实现算24点游戏》 在编程世界中,Delphi 7是一款经典的集成开发环境(IDE),以其高效、稳定的编译器和丰富的组件库深受开发者喜爱。本项目是用Delphi 7编写的一个算24点游戏程序,它无需任何额外的第三...

    【算24点】游戏Java源码【有注释】

    【算24点】游戏是基于数学和策略的娱乐活动,玩家通常使用四张1-13的扑克牌,通过加、减、乘、除、括号等操作尝试计算出结果为24。在这个Java实现的版本中,我们可以通过源码来深入理解其算法和编程技巧。 首先,...

    新版苏教版三年级数学下册算24点优质课件PPT课件.pptx

    在玩算24点时,首先要理解游戏规则:给定四张包含1到13的扑克牌,目标是通过加、减、乘、除以及括号的使用,使得计算结果等于24,且每张牌只能使用一次。这不仅考验学生的计算能力,更要求他们具备策略性思考和问题...

    java 算24点(可算5555、3388)

    一个算24点小程序,java写的。

    算24点游戏 支持负数

    算24点游戏,一个深受人们喜爱的智力挑战游戏,旨在通过四张扑克牌上的数字,利用加、减、乘、除以及括号来得出24这个结果。而在此基础上引入负数,无疑增加了游戏的难度和趣味性。在支持负数的算24点游戏中,玩家...

    关于算24点问题求解

    "算24点"是一个经典的数学游戏,适合各年龄段的人群,可以锻炼玩家的心算能力和逻辑思维。游戏规则简单:给定四张1至13之间的扑克牌,目标是通过加、减、乘、除(允许一次使用括号)运算,使得结果等于24。下面我们...

Global site tag (gtag.js) - Google Analytics