Board logo

标题: [数值计算] 批处理怎样列出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 编辑

晕~~回贴后才看到是新手练功区~~~
真的晕了~~~
  1. @echo off&color 2f&setlocal enableDelayedExpansion
  2. set str=123456789ABCDEF
  3. rem 用 #号 代替 *号 处理,
  4. set fh= + - # /
  5. rem 随机取四个数
  6. for /l %%a in (13,-1,10) do (
  7.     set/a a=!random! %% %%a,b=a+1
  8.     for /f "tokens=1,2" %%b in ("!a! !b!") do (
  9.         set/a $%%a=0x!str:~%%b,1!
  10.         set str=!str:~,%%b!!str:~%%c!
  11.     )
  12. )
  13. set num= !$13! !$12! !$11! !$10!
  14. rem 四数组合
  15. for %%a in (!num!) do (
  16.     set nm1=!num: %%a=!
  17.     for %%b in (!nm1!) do (
  18.         set nm2=!nm1: %%b=!
  19.         for %%c in (!nm2!) do (
  20.                 set nm3=!nm2: %%c=!
  21. rem 符号组合
  22. for %%1 in (!fh!) do (
  23.     set fh1=!fh: %%1=!
  24.     for %%2 in (!fh1!) do (
  25.         set fh2=!fh1: %%2=!
  26.         for %%3 in (!fh2!) do (
  27.                 set fh3=!fh2: %%3=!
  28.      set all=%%a %%2 %%b %%3 %%c !fh3!!nm3!
  29.         rem 把 #号 换成 *后 计算
  30.      set/a ru=!all:#=*! 2>nul
  31.         rem 有结果则显示出来
  32.      if !ru! equ 24 echo;!!all:#=x! = !ru!&set yy=1
  33. )))
  34. )))
  35. if not defined yy echo !num! 四数没有结果
  36. 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