标题: [ 中级 ] 批处理计算即开型彩票中奖金额 [打印本页]
作者: 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给出的动态演示中的结果好像有问题吧。第一个还正确,后两个都不对啊。
现在就好了,刚才没看清楚规则,全部完后还要相加。已经更新
- @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 :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
- @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 loop
复制代码
版主中了50000?人民币啊,运气太好了!!
[ 本帖最后由 firewolf85 于 2008-12-9 14:25 编辑 ]
作者: tireless 时间: 2008-12-9 12:40
- @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+=%%a
复制代码
做了这个题目才知道在 for /F 中,tokens 的值不能大于 31...
作者: terse 时间: 2008-12-12 01:07
也发一个 大于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 lp
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |