返回列表 发帖

【练习-056】随机产生规定范围内的日期

出题目的:
  考察大家对日期的计算能力
  巩固大家对随机取数的理解
加分原则:
  满分15分,视情况加分(以思路为重)
解题要求:
  要求代码高效、简洁、无临时文件
  请管理层的技术层暂不贴出代码,但可跟贴提示
题目如下:
  随机生成100个在2000-1-1至2009-12-31时间范围内的日期(可以重复),但要求是合理日期,如2003-2-29
2007-3-32都不是合理日期,也就是说无论代码运行多少次,都不会出现不合理的日期。
***共同提高***

回复 2楼 的帖子

1、兄弟对题意中的随机概念理解有误,题目是要求随机生成100个2000-1-1至2009-12-31时间内的日期,也就
是说在这个时间范围内的日期都有可能出现,所以不能抛弃29、30、31这样的日子。

2、用call会大大降低代码效率,建议开启变量延迟不用call。
1

评分人数

    • qzwqzw: 呵呵,已经摆明车马是钻漏了,还这么较真 ...PB + 2
***共同提高***

TOP

给出我最开始的解(想出题目后自己第一想到的思路):
@echo off&setlocal enabledelayedexpansion
set "days=31"
for %%a in (1 3 5 7 8 10 12 4 6 9 11) do (
    if %%a equ 4 set /a days-=1
    set /a _%%a=days
)
for /l %%a in (1,1,100) do (
    set /a a=!random!%%10,b=!random!%%12+1,ys=a%%4,_2=28
    if !ys! equ 0 set /a _2=29
    set /a c=!random!%%_!b!+1
    echo 200!a!-!b!-!c!
)
pause>nulCOPY
1

评分人数

    • qzwqzw: 嗯,符合简单实用的原则PB + 5
***共同提高***

TOP

现在突然想起来qzw原来是cn-dos的故人啊,我可真是有眼不识金镶玉啊。。。

关于此题个人感觉并无大的难点,生成的日期是三组随机数的组合,只要处理好

因月随机数取值的变化而导致的天随机数取值上限的变化就可以了,于是从这层

意义上来讲逻辑运算的拐的弯比if判断要多了,所以个人偏向于用if判断来处理这

样的情况。
***共同提高***

TOP

返回列表