[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

【练习-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

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

评分人数

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

TOP

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

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

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

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

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

TOP

返回列表