Board logo

标题: [ 中级 ] 批处理计算即开型彩票中奖金额 [打印本页]

作者: wxcute    时间: 2008-12-7 15:50     标题: [ 中级 ] 批处理计算即开型彩票中奖金额

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

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

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

作者: batman    时间: 2008-12-7 19:15

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

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

[ 本帖最后由 tireless 于 2008-12-7 19:33 编辑 ]
作者: 随风    时间: 2008-12-7 19:35

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

[ 本帖最后由 随风 于 2008-12-7 19:39 编辑 ]
作者: wxcute    时间: 2008-12-7 19:37

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

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

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

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

如5个数都是1-9间的随机数,那这个说法怕是不正确的吧!
作者: tireless    时间: 2008-12-7 19:55     标题: 回复 6楼 的帖子

5个数字,每个数字的范围大小为 1~9 这个角度来算,确实会超过 32。这里暂且不考虑这个情况,因为真实的这个彩票没有设计超过 32 的。
作者: lhjoanna    时间: 2008-12-8 01:45

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

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

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

[ 本帖最后由 lhjoanna 于 2008-12-8 03:02 编辑 ]
作者: tireless    时间: 2008-12-8 02:34     标题: 回复 8楼 的帖子

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

[ 本帖最后由 tireless 于 2008-12-8 02:36 编辑 ]
作者: lhjoanna    时间: 2008-12-8 03:05     标题: 回复 9楼 的帖子

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

[ 本帖最后由 lhjoanna 于 2008-12-8 03:06 编辑 ]
作者: firewolf85    时间: 2008-12-8 22:06

  1. @echo off&setlocal enabledelayedexpansion
  2. 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
  3. :loop
  4. set /p hm=请输入你的中奖号码,用空格隔开:
  5. set jj=0
  6. set ii=0
  7. for %%i in (%hm%) do (
  8. set /a ii+=1
  9. set i_!ii!=%%i
  10. )
  11. set ii=0
  12. set /a i_2+=i_1
  13. set /a i_3+=i_2
  14. set /a i_4+=i_3
  15. set /a i_5+=i_4
  16. for %%i in (%str%) do (
  17. set /a ii+=1
  18. if !ii!==%i_1%  (set /a jj+=%%i)
  19. if !ii!==%i_2%  (set /a jj+=%%i)
  20. if !ii!==%i_3%  (set /a jj+=%%i)
  21. if !ii!==%i_4%  (set /a jj+=%%i)
  22. if !ii!==%i_5%  (set /a jj+=%%i)
  23. )
  24. echo 你共得到奖金%jj%
  25. pause>nul
  26. echo.
  27. goto loop
复制代码
版主中了50000?人民币啊,运气太好了!!

[ 本帖最后由 firewolf85 于 2008-12-9 14:25 编辑 ]
作者: tireless    时间: 2008-12-9 12:40

  1. @echo off & setlocal EnableDelayedExpansion
  2. 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
  3. :bgn
  4. set RMB=
  5. set token=
  6. set /p input=号码:
  7. for /l %%a in (0 1 4) do (
  8.   set /a 1/!input:~%%a,1! 2>nul || goto error
  9.   set /a token+=!input:~%%a,1!
  10.   if !token! gtr 32 goto error
  11.   call :money !token!
  12. )
  13. echo 中奖金额: %RMB%
  14. echo.
  15. goto bgn
  16. :error
  17. cls & echo 输入错误。请按任意键返回. . .
  18. pause>nul & cls & goto bgn
  19. :money
  20. if %1 equ 32 set /a "RMB+=100" & goto :eof
  21. for /f "tokens=%1" %%a in ("%str%") do set /a RMB+=%%a
复制代码
做了这个题目才知道在 for /F 中,tokens 的值不能大于 31...
作者: terse    时间: 2008-12-12 01:07

也发一个 大于32 回头走  没有设置跳出错误 位数空 跳出读取总额
  1. @echo off&setlocal EnableDelayedExpansion
  2. 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
  3.   for %%i in (%str%) do (
  4.     set/a n+=1
  5.     set _!n!=%%i
  6.   )
  7. :lp
  8. set RMB=&set in=
  9.   set /p put=号码:
  10.      for /l %%i in (0 1 4) do (
  11.        if not "!put:~%%i,1!"=="" (set i=!put:~%%i,1!)else goto end
  12.        set/a in+=i
  13.        if not defined _!in! set/a in=in%%32
  14.        set/a RMB+=_!in!
  15.      )
  16. :end
  17. echo  中奖金额: %RMB%
  18. goto lp
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2