[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
batman 的这个题不太好作啊。
excel 我是一窍不通,只能考虑用p来作。
对题意理解有点模糊。
题中要求:每天随机出现一人
也是说每天只给一个人发工资,如:2009-01-01给甲发了工资就不能给乙发工资了?
看楼主本意应该不是这个意思吧?
否则就要在1000个日期里随机选一个了,那样岂不是还要考虑闰年情况?
如果是这样的话只要解决闰年情况,此题的难度反而减小了。
下面的解题思路是在同一天可以给不同的多个人发工资的情况。
思路:
先假定日期规定是在2009年,即:不用考虑闰二月的情况。
(题中虽说要求随机日期,但闰月问题似乎不是重点。)
1、首先要考虑9:1
  也就是要记录每个人领工资的次数,当领了9次以后,下一次就必须是负数。
  这点并不难,只要以人名为变量名,每领一次就加一并%%9 当为0时就是负数即可。
2、同一人不能一天领两次工资:
   也就是要记录每个人领工资的日期,每个人每个日期只能用一次。
   可以考虑先将365个日期随机乱序,然后每个人领工资的日期都是从第一个开始依次选择,
   这样就不会有重复日期了。
技术问题请到论坛发帖求助!

TOP

此题关键要考虑两种情况
1、当某人领工资的次数超过365次时,该人就不能再继续领工资。
2、当某人某月领工资次数超过该月的最大天数时,比如2月就不能超过28次,
   否则不是代码死循环就是出现同一人同一天领多次工资。
   这是最容易忽略的一点。
楼主3楼的代码完全不合题意啊,
你的结果全是每月的最后一天,不能算是随机
并且结果中很多同一人同一天领多次工资的情况。
解题代码
  1. @echo off&setlocal enabledelayedexpansion
  2. set "tab= "
  3. set "wjm=b.txt"
  4. set "rm=甲乙丙丁戊己庚辛壬癸"&set /a c=10,n=0
  5. for %%a in (31 28 31 30 31 30 31 31 30 31 30 31) do (
  6.    set /a n+=1
  7.    for %%i in (甲 乙 丙 丁 戊 己 庚 辛 壬 癸)do set /a %%i!n!=%%a,.%%i!n!=0
  8. )
  9. (echo 姓名%tab%工资%tab%日期
  10. for /l %%a in (1 1 1000) do (
  11.    set /a zf=!random!%%10,w=!random!%%!c!,gz=!random!%%100
  12.    if !zf! equ 0 (set f=) else set "f=-"
  13.    call :yue
  14. ))>%wjm%
  15. start %wjm%&exit
  16. :yue
  17.   set "r=!rm:~%w%,1!"
  18.   set /a yue=!random!%%12+1
  19.   if !.%r%%yue%! geq !%r%%yue%! goto yue
  20.   set /a .%r%%yue%+=1,riqi=!%r%%yue%!,!r!+=1,rz=!r!
  21.   if !rz! geq 365 set /a c-=1&set rm=!rm:%r%=!
  22. :ri
  23.   set /a ri=!random!%%!riqi!+1,gz="~!f!gz+1"
  24.   if defined !r!2009-!yue!-!ri! goto ri
  25.   set !r!2009-!yue!-!ri!=a
  26.   echo !r!%tab%!gz!%tab%2009-!yue!-!ri!
  27. goto :eof
复制代码

::生成汇总表 略作界面美化
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "skip=1 tokens=1-3 delims= " %%a in (b.txt) do (
  3.    for /f "tokens=2 delims=-" %%i in ("%%c") do set /a %%a%%i+=%%b,.%%i+=%%b
  4. )
  5. for %%a in (一 二 三 四 五 六 七 八 九 十 十一) do (
  6.    set "str=%%a      "&set "str2=!str2! !str:~0,5!"
  7. )
  8. (echo.     !str2!十二
  9. for %%a in (甲 乙 丙 丁 戊 己 庚 辛 壬 癸) do (
  10.    set "var="
  11.    for /l %%i in (1 1 12) do (
  12.       set "num=!%%a%%i!                "
  13.       set "var=!var! !num:~0,6!"
  14.    )
  15.    echo %%a   !var!
  16. )
  17. for /f "tokens=2 delims==" %%a in ('set .') do (
  18.    set "num=%%a              "
  19.    set hj=!hj! !num:~0,6!
  20. )
  21. echo.&echo 合计 !hj!)>c.txt
  22. start c.txt
复制代码
技术问题请到论坛发帖求助!

TOP

返回列表