标题: [数值计算] 批处理怎样列出1-13里能组成24点数? [打印本页]
作者: smallpigs 时间: 2010-11-12 16:01 标题: 批处理怎样列出1-13里能组成24点数?
从1到13中随机取四个数字,不得重复数字,取出的四个数字必须都用到。利用加减乘除得出结果24。想了很久了,没想出来。谢谢啊,帮我解答下。
作者: broly 时间: 2010-11-12 18:47
加减乘除都要?
作者: netbenton 时间: 2010-11-12 19:30
本帖最后由 pcl_test 于 2016-10-2 15:07 编辑
晕~~回贴后才看到是新手练功区~~~
真的晕了~~~- @echo off&color 2f&setlocal enableDelayedExpansion
- set str=123456789ABCDEF
-
- rem 用 #号 代替 *号 处理,
- set fh= + - # /
-
- rem 随机取四个数
- for /l %%a in (13,-1,10) do (
- set/a a=!random! %% %%a,b=a+1
- for /f "tokens=1,2" %%b in ("!a! !b!") do (
- set/a $%%a=0x!str:~%%b,1!
- set str=!str:~,%%b!!str:~%%c!
- )
- )
-
- set num= !$13! !$12! !$11! !$10!
-
- rem 四数组合
- for %%a in (!num!) do (
- set nm1=!num: %%a=!
- for %%b in (!nm1!) do (
- set nm2=!nm1: %%b=!
- for %%c in (!nm2!) do (
- set nm3=!nm2: %%c=!
-
- rem 符号组合
- for %%1 in (!fh!) do (
- set fh1=!fh: %%1=!
- for %%2 in (!fh1!) do (
- set fh2=!fh1: %%2=!
- for %%3 in (!fh2!) do (
- set fh3=!fh2: %%3=!
-
- set all=%%a %%2 %%b %%3 %%c !fh3!!nm3!
- rem 把 #号 换成 *后 计算
- set/a ru=!all:#=*! 2>nul
- rem 有结果则显示出来
- if !ru! equ 24 echo;!!all:#=x! = !ru!&set yy=1
-
- )))
-
- )))
- if not defined yy echo !num! 四数没有结果
-
- pause
复制代码
[ 本帖最后由 netbenton 于 2010-11-12 19:32 编辑 ]
作者: 523066680 时间: 2010-11-12 20:12 标题: 回复 3楼 的帖子
晕~~回贴后才看到是新手练功区~~~
真的晕了~~~
本区斑竹哦 ,必须给力
作者: broly 时间: 2010-11-12 22:27 标题: 回复 3楼 的帖子
式子有重复出现的了。
作者: broly 时间: 2010-11-12 22:29 标题: 回复 3楼 的帖子
呃,不知道版主有没测试过代码?
怎么感觉,怪怪的
作者: smallpigs 时间: 2010-11-13 14:46 标题: 回复 3楼 的帖子
意思是有了,不过还是有点问题的,好多重复的在里面哦!而且还有错误的!加油加油哦!
作者: smallpigs 时间: 2010-11-13 14:47 标题: 回复 2楼 的帖子
不一定都要!只有四个字相运算,不可能四个运算符都要的!
作者: skuny 时间: 2010-12-22 23:07
有难度 组合太多了!有难度!
作者: hanyeguxing 时间: 2010-12-22 23:29
1,需要对余数进行验证:
set/a a=7/3和set/a a=6/3,都会得到相同的结果2,但从数学角度看,只有set/a a=6/3是合理的,所以需要对包含/的set/a中进行余数验证是否为0
但情况总是复杂的,例如10*6/5+12这样的算式是合法的,10/3*6+4这样的算式也是合法的。。。
2,关于重复过滤
10*6/5+12和12+10*6/5是重复的
5+4*3+7和5*4-3+7是不重复的。。。
用纯批处理做这个。。。郁闷
[ 本帖最后由 hanyeguxing 于 2010-12-23 02:15 编辑 ]
作者: 523066680 时间: 2010-12-23 10:21 标题: 回复 10楼 的帖子
有几个版本的算24点批处理是从一开始就采用分数有理化。
所有数统一采用分数形式 例如10= 10/1 ,递归里反正也是两个数之间,遇到
分数时想办法统一他们。然后模拟分数分母分子运算的形式。
(3/7+3)*7=24
=> (3/7+21/7)*(7/1)=(24/1)
=> 24/7*7/1=168/7
在实际操作中分子*分子,分母*分母 ,然后两边的分母分子相同。
意思是有了,不过还是有点问题的,好多重复的在里面哦!而且还有错误的!加油加油哦!
看到这句话以后估计大家要闪鸟了,完全属于旁观的态度啊
去重复应该要花好多时间实践,闪鸟。
[ 本帖最后由 523066680 于 2010-12-23 10:22 编辑 ]
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |