返回列表 发帖

[游戏娱乐] 三八二十四:批处理计算24点

生成四个1-9的随机数,再进行计算。
代码有缺陷,欢迎大家测试,也欢迎大家帮忙修改。
@echo off
title 三八二十四
cd/d "%~dp0"
::临时文件→
echo +^
-^
*^
/>TMP_fh
if not #%1==# %0
::思路
::%4 %1 %5 %2 %6 %3 %7
:: A + B + C + D
::ABCD做排列
::符号做循环,并用以下公式加括号
echo %%4%%1%%5%%2%%6%%3%%7^
(%%4%%1%%5)%%2%%6%%3%%7^
(%%4%%1%%5%%2%%6)%%3%%7^
%%4%%1(%%5%%2%%6)%%3%%7^
%%4%%1(%%5%%2%%6%%3%%7)^
%%4%%1%%5%%2(%%6%%3%%7)^
(%%4%%1%%5)%%2(%%6%%3%%7)>TMP_gs
attrib +s +h "TMP_fh"
attrib +s +h "TMP_gs"
::←临时文件
:bg
endlocal
cls
setlocal enabledelayedexpansion
::生成四个1-9的数→
set/a a=%random%%%9+1,b=%random%%%9+1,c=%random%%%9+1,d=%random%%%9+1
echo 四个随机数:%a% %b% %c% %d%
::←
set/p=正在计算,请等待...<nul
set sr1=a b c d
::排列(plp626方案)→
for %%a in (!sr1!) do (set sr2=!sr1:%%a =!
 for %%b in (!sr2!) do (set sr3=!sr2:%%b =!
  for %%c in (!sr3!) do (set sr4=!sr3:%%c =!
   call :pl %%a %%b %%c !sr4!
   if defined flag goto :show
) ) )
::←排列
:show
 if defined flag (
  set/p=其中一结果:!fhvar!=%jg%<nul
 ) else (
  set/p=不好意思,没有算出来...<nul
 )
pause>nul
goto :bg
::调用标签→
:pl
::echo !%1! !%2! !%3! !%4!
 call :fh !%1! !%2! !%3! !%4!
 goto :eof
::符号循环→
:fh
for /f %%i in (TMP_fh) do (
 for /f %%j in (TMP_fh) do (
  for /f %%k in (TMP_fh) do (
   call :crfh %%i %%j %%k %1 %2 %3 %4
   if defined flag goto :eof
  )
 )
)
goto :eof
::←符号循环
:crfh
::判断整除(不完善)→
 if not %1==/ (
  if not %2==/ (
   if %3==/ (
    set/a mod=%6%%%7
    if !mod! neq 0 goto :eof
   )
  ) else (
   set/a mod=%5%%%6
   if !mod! neq 0 goto :eof
  )
 ) else (
  set/a mod=%4%%%5
  if !mod! neq 0 goto :eof
 )
::←判断整除
::七个公式→
 for /f %%g in (TMP_gs) do (
  call :isR "%%g"
  if defined flag goto :eof
 )
 goto :eof
::←七个公式
:isR
 set fhvar=%~1
 set/a jg=%fhvar% 2>nul
 if #!jg!==#24 set flag=1
 goto :eofCOPY
1

评分人数

测试信息:
四个随机数:8 5 7 3
正在计算,请等待...系统找不到文件 +。
系统找不到文件 +。
系统找不到文件 +。
系统找不到文件 +。
系统找不到文件 +。
系统找不到文件 +。
系统找不到文件 +。
系统找不到文件 +。
系统找不到文件 +。
系统找不到文件 +。
系统找不到文件 +。
系统找不到文件 +。
系统找不到文件 +。
系统找不到文件 +。
系统找不到文件 +。
系统找不到文件 +。
系统找不到文件 +。
系统找不到文件 +。
系统找不到文件 +。
系统找不到文件 +。
系统找不到文件 +。
系统找不到文件 +。
系统找不到文件 +。
系统找不到文件 +。
不好意思,没有算出来...COPY
心绪平和,眼藏静谧。

TOP

特殊符号看来不大好用,我原来用了 + - 两个符号做文件名
已改成TMP_fh和TMP_gs
真是

TOP

生成的数列是1 1 7 7,运算结果:
7*7/(1+1)=24
个人建议,如果是相除得24,应该判断余数是否是0,为0才set flag=1,若不为0,flag依然保持空值。
心绪平和,眼藏静谧。

TOP

运行结果:
四个随机数:1 8 8 5
不好意思,没有算出来...

我都算出来了,(8-5)*8*1

[ 本帖最后由 yslyxqysl 于 2008-10-2 18:55 编辑 ]
1

评分人数

    • youxi01: 哈哈,人比机聪明!!PB + 2

TOP

5楼的1 8 8 5应该不会算错,原因如下
有的时候其他程序运行得紧会影响计算,这点不知道怎么改进。

另:整除问题很头疼,简单的是处理了,
像这样的已经被先加减后乘除的循环和一般整除判断剔除了。
6/5*6*4

像 4 楼 [ 7 7 1 1] [7 2 1 7]这样的还是不好判断
7/1*7/2

[ 本帖最后由 wxcute 于 2008-10-2 19:34 编辑 ]

TOP

四个随机数:9 7 1 8
不好意思,没有算出来...

正确答案:(9-7+1)*8
四个随机数:8 8 2 4
不好意思,没有算出来...

正确答案:(8+8-4)*2
四个随机数:3 3 9 7
不好意思,没有算出来...

正确答案:3*7+9/3
作何解释?

TOP

在联盟的帖子里,有关于四项基本运算的,有很多人写过
namejm和其他高人写过,本人也写过,看看,或许对你有点启发

TOP

======回7楼
我这儿都能给出你的三个例子的正确答案:
四个随机数:9 7 1 8
其中一结果:9+7+1*8=24
四个随机数:8 8 2 4
其中一结果:8+8+2*4=24
四个随机数:3 3 9 7
其中一结果:3+9/3*7=24

请列出测试环境,我这儿是XP SP3

======回8楼
我就去看看。

TOP

回复 9楼 的帖子

我的系统是XP SP2
把后缀名从bat改成cmd就好了,奇怪。

[ 本帖最后由 yslyxqysl 于 2008-10-3 12:25 编辑 ]

TOP

1-10 以内随机 4 个数基本上都能算出来,完善了整除判断,不过花的时间比原来 1 楼长了。

超过 10(如最大到 12 或更大)就会出现整除判断的错误,还好不是很多。

增加了手动输入

中间过程负数未判断,如下:
(5-8)*(2-10)=24

TOP

[url=][/url]

TOP

返回列表