返回列表 发帖

[ 中级 ] 批处理计算即开型彩票中奖金额

[ 中级 ] 计算即开型彩票中奖金额:
其中 “中级” 代表此题目的难度,详见链接(题目出自:[tireless]第 6 层,级别划分见顶楼)http://bbs.bathome.net/thread-2687-1-1.html
不过级别划分也只是粗略的,只要认为自己有能力,都可以尝试这题。

彩票背面的游戏规则
刮开城堡形状的覆盖区,从起点开始,第一关的数字是几,就在闯关图上冲几步,如果停到中奖金额上,即中该金额奖金;在第一关的基础上,第二关的数字是几,向前再冲几步,如果停到中奖金额上,即中该金额奖金,以此类推,按顺序冲完五关的数字后,将所有中奖金额相加,即为你中的奖金。中奖奖金兼中兼得。

要求:
显示中奖金额后,返回输入号码处。

有三个问题需要兄弟说明下:
1、彩票上关卡、山峰、河流、刀子分别代表什么意思(本人没玩过这东东)
2、五关的五个数都是随机生成的吗?数值范围是多少?(总共只有33个图案,如五数相加大于33是不是又退回来)
3、彩票上的R、Q、U、W又分别代表什么意思?
***共同提高***

TOP

回复 2楼 的帖子

1、如果停到中奖金额上,即中该金额奖金
2、恩,是随机的,由用户输入号码,然后显示中奖金额,然后再返回输入号码处;数值范围是 1~9;有 32 个图案,5 个数相加不会大于 32。
3、是拼音缩写。2eR、7Qi、6lU、5Wu。

[ 本帖最后由 tireless 于 2008-12-7 19:33 编辑 ]

TOP

确实不知道是怎么回事?可否再说详细点?比如这游戏是怎么玩的?
显示中奖金额后,返回输入号码处。
这里输入的是什么号码?
另:这是给新手作的题目吧?

[ 本帖最后由 随风 于 2008-12-7 19:39 编辑 ]
技术问题请到论坛发帖求助!

TOP

题目是 tireless 兄出的,看顶楼链接(我收集题目的帖子第 6 层)。

图案含义:有钱得钱,没钱观光(也叫做谢谢惠顾)。

应该是共五关,五关总数应该小于 33(最后几个可能要适当控制下)。至于字母应该是防止做假的措施,即用来对码的和写批处理无关,但如果要精益求精模拟得更像一点,也要考虑考虑。
================================
以上有出路,原来字母和数字的拼音有关。

TOP

原帖由 tireless 于 2008-12-7 19:28 发表
5 个数相加不会大于 32。

如5个数都是1-9间的随机数,那这个说法怕是不正确的吧!
***共同提高***

TOP

回复 6楼 的帖子

5个数字,每个数字的范围大小为 1~9 这个角度来算,确实会超过 32。这里暂且不考虑这个情况,因为真实的这个彩票没有设计超过 32 的。

TOP

楼上tireless给出的动态演示中的结果好像有问题吧。第一个还正确,后两个都不对啊。

现在就好了,刚才没看清楚规则,全部完后还要相加。已经更新
@echo off&setlocal enabledelayedexpansion 2>nul
mode con lines=15 cols=20
set "code=32 31 29 28 26 25 24 22 20 19 17 16 15 13 11 10 58 7 6 4 3 1"
set "money=100 1000 70 2 30 500 10 2 50 1000 2 50000 100 500 30 10 1000 4 20 50 50000 2"
for %%i in (!code!) do (
    for /f "tokens=1" %%j in ("!money!") do set m%%i=%%j
    set money=!money:* =!
)
:begin
cls
set number_by_hand=
set str=
echo.
set /p "str=请输入:"
if not %str% geq 11111 echo.&echo 输入有误。&pause>nul&goto :begin
if not %str% leq 99999 echo.&echo 输入有误。&pause>nul&goto :begin
for /l %%i in (0 1 4) do (
    set "number_by_hand=!number_by_hand!!str:~%%i,1! "
)
set /a sum=0,num=0
for %%i in (!number_by_hand!) do (
    set /a num+=1
    set /a sum+=%%i
    set t!num!=!sum!
)
set "number=!t1! !t2! !t3! !t4! !t5!"
if not !t5! leq 32 echo.&echo  5个数字和超过32。&pause>nul&goto :begin
set flag=0
set result=0
for %%i in (!number!) do (
    for %%j in (!code!) do (
        if %%i equ %%j (
           set /a result+=!m%%j!
           set flag=1
        )
     )
)
if !flag! equ 1 (echo.&echo 中奖金额为:!result!&echo.) else (echo.&echo  谢谢惠顾!!&echo.)
pause>nul
goto :beginCOPY

以上代码稍微改下,就可以生成一系列指定中奖金额的5位数,或者不中奖的5位数。

[ 本帖最后由 lhjoanna 于 2008-12-8 03:02 编辑 ]

TOP

回复 8楼 的帖子

不,是你算错了。要将所有奖金相加。

[ 本帖最后由 tireless 于 2008-12-8 02:36 编辑 ]

TOP

回复 9楼 的帖子

呵呵,是我弄错了。全部完后还要相加,已经更新了。以前也买过这种彩票,都是数到有奖的就不往下数了,直接去拿钱了。看来亏了,不过我最高纪录是10块钱,应该没那么好运好几个数字都中奖吧,哈~~

[ 本帖最后由 lhjoanna 于 2008-12-8 03:06 编辑 ]

TOP

@echo off&setlocal enabledelayedexpansion
set str=2 0 50000 50 0 20 4 1000 0 10 30 0 500 0 100 50000 2 0 1000 50 0 2 0 10 500 30 0 2 70 0 1000 100
:loop
set /p hm=请输入你的中奖号码,用空格隔开:
set jj=0
set ii=0
for %%i in (%hm%) do (
set /a ii+=1
set i_!ii!=%%i
)
set ii=0
set /a i_2+=i_1
set /a i_3+=i_2
set /a i_4+=i_3
set /a i_5+=i_4
for %%i in (%str%) do (
set /a ii+=1
if !ii!==%i_1%  (set /a jj+=%%i)
if !ii!==%i_2%  (set /a jj+=%%i)
if !ii!==%i_3%  (set /a jj+=%%i)
if !ii!==%i_4%  (set /a jj+=%%i)
if !ii!==%i_5%  (set /a jj+=%%i)
)
echo 你共得到奖金%jj%
pause>nul
echo.
goto loopCOPY
版主中了50000?人民币啊,运气太好了!!

[ 本帖最后由 firewolf85 于 2008-12-9 14:25 编辑 ]

TOP

@echo off & setlocal EnableDelayedExpansion
set str=2 0 50000 50 0 20 4 1000 0 10 30 0 500 0 100 50000 2 0 1000 50 0 2 0 10 500 30 0 2 70 0 1000 100
:bgn
set RMB=
set token=
set /p input=号码:
for /l %%a in (0 1 4) do (
  set /a 1/!input:~%%a,1! 2>nul || goto error
  set /a token+=!input:~%%a,1!
  if !token! gtr 32 goto error
  call :money !token!
)
echo 中奖金额: %RMB%
echo.
goto bgn
:error
cls & echo 输入错误。请按任意键返回. . .
pause>nul & cls & goto bgn
:money
if %1 equ 32 set /a "RMB+=100" & goto :eof
for /f "tokens=%1" %%a in ("%str%") do set /a RMB+=%%aCOPY
做了这个题目才知道在 for /F 中,tokens 的值不能大于 31...

TOP

也发一个 大于32 回头走  没有设置跳出错误 位数空 跳出读取总额
@echo off&setlocal EnableDelayedExpansion
set str=2 0 50000 50 0 20 4 1000 0 10 30 0 500 0 100 50000 2 0 1000 50 0 2 0 10 500 30 0 2 70 0 1000 100
  for %%i in (%str%) do (
    set/a n+=1
    set _!n!=%%i
  )
:lp
set RMB=&set in=
  set /p put=号码:
     for /l %%i in (0 1 4) do (
       if not "!put:~%%i,1!"=="" (set i=!put:~%%i,1!)else goto end
       set/a in+=i
       if not defined _!in! set/a in=in%%32
       set/a RMB+=_!in!
     )
:end
echo  中奖金额: %RMB%
goto lpCOPY

TOP

返回列表