24点游戏c语言链表做法,解24点
http://rosettacode.org/wiki/24_game_Player
上面链接里的暴力解法相似的输出项太多了,我总结了相互间不重复的表达式88种(4个数字加减乘除):
MAN4D4S = [
# '((%d %s %d) %s %d) %s %d' 48
# +++
'%d + %d + %d + %d',
# ++-
'%d + %d + %d - %d',
# ++*
'(%d + %d + %d) * %d',
'(%d + %d) * %d + %d',
'%d * %d + %d + %d',
# ++/
'(%d + %d + %d) / %d',
'(%d + %d) / %d + %d',
'(%d / %d) + %d + %d',
# +--
'%d + %d - %d - %d',
# +-*
'(%d + %d - %d) * %d',
'(%d + %d) * %d - %d',
'(%d - %d) * %d + %d',
'%d * %d + %d - %d',
# +-/
'(%d + %d - %d) / %d',
'(%d + %d) / %d - %d',
'(%d - %d) / %d + %d',
'%d / %d + %d - %d',
# +**
'(%d + %d) * %d * %d',
'(%d * %d + %d) * %d',
'%d * %d * %d + %d',
# +*/
'(%d + %d) * %d / %d',
'(%d * %d + %d) / %d',
'%d * %d / %d + %d',
'(%d / %d + %d) * %d',
# +//
'(%d + %d) / %d / %d',
'(%d / %d + %d) / %d',
'%d / %d / %d + %d',
# ---
'%d - %d - %d - %d',
# --*
'(%d - %d - %d) * %d',
'(%d - %d) * %d - %d',
'%d * %d - %d - %d',
# --/
'(%d - %d - %d) / %d',
'(%d - %d) / %d - %d',
'%d / %d - %d - %d',
# -**
'(%d - %d) * %d * %d',
'(%d * %d - %d) * %d',
'%d * %d * %d - %d',
# -*/
'(%d - %d) * %d / %d',
'(%d * %d - %d) / %d',
'%d * %d / %d - %d',
'(%d / %d - %d) * %d',
# -//
'(%d - %d) / %d / %d',
'(%d / %d - %d) / %d',
'%d / %d / %d - %d',
# ***
'%d * %d * %d * %d',
# **/
'%d * %d * %d / %d',
# *//
'%d * %d / %d / %d',
# ///
'%d / %d / %d / %d',
# '(%d %s (%d %s %d)) %s %d' +8
'(%d - %d * %d) * %d',
'(%d - %d / %d) * %d',
'%d / (%d + %d) * %d',
'%d / (%d - %d) * %d',
'(%d - %d * %d) / %d',
'(%d - %d / %d) / %d',
'%d / (%d + %d) / %d',
'%d / (%d - %d) / %d',
# '(%d %s %d) %s (%d %s %d)' +14
'%d * %d + %d * %d',
'%d * %d + %d / %d',
'%d / %d + %d / %d',
'%d * %d - %d * %d',
'%d * %d - %d / %d',
'%d / %d - %d * %d',
'%d / %d - %d / %d',
'(%d + %d) * (%d + %d)',
'(%d + %d) * (%d - %d)',
'(%d - %d) * (%d - %d)',
'(%d + %d) / (%d + %d)',
'(%d + %d) / (%d - %d)',
'(%d - %d) / (%d + %d)',
'(%d - %d) / (%d - %d)',
# '%d %s ((%d %s %d) %s %d)' +14
'%d - ((%d + %d) * %d)',
'%d - ((%d + %d) / %d)',
'%d - ((%d - %d) * %d)',
'%d - ((%d - %d) / %d)',
'%d - (%d * %d * %d)',
'%d - (%d * %d / %d)',
'%d - (%d / %d / %d)',
'%d / (%d + %d + %d)',
'%d / (%d + %d - %d)',
'%d / (%d - %d - %d)',
'%d / (%d * %d + %d)',
'%d / (%d * %d - %d)',
'%d / (%d / %d + %d)',
'%d / (%d / %d - %d)',
# '%d %s (%d %s (%d %s %d))' +4
'%d - (%d / (%d + %d))',
'%d - (%d / (%d - %d))',
'%d / (%d - %d * %d)',
'%d / (%d - %d / %d)'
]
用上面的字典就不需要分步求解了,我做成了Gem
gem install 24games
下面是分步思路
“舍弃相似项、变换表达式”
定义操作符优先级:
@@ops_pri = {"**" => 0,"*" => 1,"/" => 1,"+" => 2,"-" => 2 }
依照操作符的优先级判断是否加括号。
5种执行流:
"i_i_i_i" => a op b op c op d |e.g. (a+b)*c+d : (2+5)*3+3
"i_i_(i_i)" => a op b op (c op d) |e.g. (a-b)/(c/d) : (13-7)/(2/8)
"i_(i_i)_i" => a op (b op c) op d |e.g. (a-b/c)*d : (13-10/2)*3
"i_(i_i_i)" => a op (b op c op d) |e.g. a/(b/c/d): 6/(2/2/4)
"i_(i_(i_i))" => a op (b op (c op d)) |e.g. a/(b-c/d) : 8/(3-8/3)
为什么是5种,有另外一种思路:4张扑克,依次夹入3个操作符
第1个操作符,可以把4张扑克分割成“3张1张”、“2张2张”、“1张3张”三种形式;
“2张2张”的场合,后两个操作符分别夹到每个“2张”中间;
“3张”的场合,可以被第二个操作符继续分割成“2张1张”或者“1张2张”,最后在“2张”中间夹入第三个操作符;
总结起来五种流程。
iiii => i iii => i i ii => i i i i
iiii => i iii => i ii i => i i i i
iiii => ii ii => i i i i
iiii => iii i => i ii i => i i i i
iiii => iii i => ii i i => i i i i
把三步走并成表达式,并加上括号,一个项就出炉了。
给表达式加括号是一个小课题。它基于三个条件:上一次操作符、本次操作符、本次操作之于上次操作的位置。如果本次操作符的优先级高于上一次,或者同级条件下,准备减去或者除以上一次表达式,需给上一次表达式加上括号。
如果三步走的结果等于24,我们就该将它存入结果集了。我用了一个Hash作为结果集,KEY由操作符组和执行流组成,VALUE放这次计算的卡片组。Hash能够把1234相乘的24种排列组合并成一种解法。
“合并相似项”
操作符流合并
合并工作的大头。 遵循("+" > "-" > "*" > "/" > "**")。分别在确定操作符组和执行流两个阶段进行过滤,要时刻清醒条件语句依靠基准的先后顺序。
e.g. a*(b*c)/d,a*(b/c*d),a/b*c*d,a*b/(c/d)...... 都取"**/"操作符组+"i_i_i_i"执行流;
运算合并
0点的运算合并。如果0点的牌面用来被做+、-运算,都等同于“不参与计算”。取+0。
1点的运算合并。如果1点的牌面用来被做*、/、**运算,都等同于“不参与计算”。取*1。
2点的运算合并。2点的牌面被2点“*”或者“**”,取*2;4点的牌面被2点“-”或者“/”,取-2。
避免除法磨损
e.g. 3388,利用分式能得出8/(3-8/3)=24,但是,电脑算除法若产生的结果大于1且小数除不尽,会产生偏差。考虑到这一点,需要把 8/(3-8/3) 通分成 8*3/(3*3-8) 处理(计算时按"4个操作符"+"i_i_(i_i_i)"执行流)。
24点游戏c语言链表做法,解24点相关推荐
- 24点游戏c语言链表做法,C语言实现24点程序(示例代码)
一.简介 本程序的思想和算法来自于C语言教材后的实训项目,程序通过用户输入四个整数计算出能够通过加减乘除得到数字24的所有表达式,程序的设计有别于一般通过穷举实现的方式,效率得到提高.算法介绍如下: ...
- 24点游戏c语言程序代码,C语言实现24点游戏源代码
本文实例为大家分享了C语言实现24点游戏的具体代码,供大家参考,具体内容如下 将算法实现改成C语言,并可在linux服务器上运行.同时修改为可显示所有结果. 注:如果传参重复,如4,4,7,7这样,会 ...
- 24点游戏——C语言纯代码及MFC风格
1.实验目的 a.24点游戏是经典的纸牌益智游戏,请完成它. 2.题目描述 从扑克中每次取出4张牌.使用加减乘除,第一个能得出24者为赢.(其中,J代表11,Q代表12,K代表13,A代表10),按照 ...
- python二十四点_python实现24点游戏(地球上最短的24点游戏代码?)
牛bi要挑大的吹,否则看帖的人没几个. 所谓24点游戏,就是4个数字和算符的排列组合: 四个里挑两个P(4,2) 计算:四个算符 四个里剩余两个+计算结果,三个里挑两个P(3,2) 计算:四个算符 经 ...
- 推荐一个和孩子玩24点游戏的工具:益乐24点
最近完成了一个小工具,可以帮助家长们和孩子一起玩24点游戏,要封版本了,记录如下: 所有工作包括: 自动求24点算法 ,采用了递归算法 一个网站,不多说, 请直接看内容:益乐24点 一个微信小程序 微 ...
- html 计算24点游戏,0048 JavaScript编程实现算24点游戏
原标题:0048 JavaScript编程实现算24点游戏 上节课在网页上使用Java实现了根据输入日期计算星座的程序. 这节课来做一个算24点游戏,主要是练习使用Java来控制网页元素. 程序设计思 ...
- 24点游戏c语言去除重复,C语言解24点游戏程序
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 前几天在微博上看到24点的游戏,6 6 6 10.算了很久是在算不出来,最后我想我何不写一个小程序解决它?说做就做,我刚开始的想法很简单,就是列举4个数的 ...
- 24点游戏c语言源代码6,C语言解24点游戏程序
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 前几天在微博上看到24点的游戏,6 6 6 10.算了很久是在算不出来,最后我想我何不写一个小程序解决它?说做就做,我刚开始的想法很简单,就是列举4个数的 ...
- c语言简单的24点游戏,C语言解24点游戏程序
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 前几天在微博上看到24点的游戏,6 6 6 10.算了很久是在算不出来,最后我想我何不写一个小程序解决它?说做就做,我刚开始的想法很简单,就是列举4个数的 ...
最新文章
- 35国,14年,世界最大科学项目,「人造太阳」即将诞生!
- php 模块指令,php artisan module常用命令
- Python中有几种办法交换两个变量的值?
- [云炬创业基础笔记]第十一章创业计划书测试10
- antd-react-mobile(踩坑记录)
- golang mysql分表_go分库分表 主从分离例子
- Docker学习总结(8)——利用Docker开启持续交付之路
- 随想录(文件系统的第一个用户程序shell)
- php 转通达信数据格式,通达信数据格式
- bat ping 返回值_清清楚楚玩游戏!10.10版本,赛娜被动层数可以ping给队友看了
- 2. 知识图谱-命名实体识别(NER)详解
- qq微信连不上服务器6,手机wifi连接上了只有QQ微信能联网其他软件都上不了网是什么原因...
- Halcon 3D 计算3D模型的3D表面法线
- 如何截图一张完整的表_表格太长怎么截图
- 信鸽推送(Android和iOS):详细流程+问题解决
- Jlink接口引脚定义
- 滑动验证码破解—python—以某东网站为例
- Python进行图片文字识别(表格图片)(使用阿里OCR接口)
- 在html页面添加了评论和回复的显示页面
- 易软通WMS仓储管理系统介绍