此题关键要考虑两种情况
1、当某人领工资的次数超过365次时,该人就不能再继续领工资。
2、当某人某月领工资次数超过该月的最大天数时,比如2月就不能超过28次,
否则不是代码死循环就是出现同一人同一天领多次工资。
这是最容易忽略的一点。
楼主3楼的代码完全不合题意啊,
你的结果全是每月的最后一天,不能算是随机
并且结果中很多同一人同一天领多次工资的情况。
解题代码
- @echo off&setlocal enabledelayedexpansion
- set "tab= "
- set "wjm=b.txt"
- set "rm=甲乙丙丁戊己庚辛壬癸"&set /a c=10,n=0
- for %%a in (31 28 31 30 31 30 31 31 30 31 30 31) do (
- set /a n+=1
- for %%i in (甲 乙 丙 丁 戊 己 庚 辛 壬 癸)do set /a %%i!n!=%%a,.%%i!n!=0
- )
- (echo 姓名%tab%工资%tab%日期
- for /l %%a in (1 1 1000) do (
- set /a zf=!random!%%10,w=!random!%%!c!,gz=!random!%%100
- if !zf! equ 0 (set f=) else set "f=-"
- call :yue
- ))>%wjm%
- start %wjm%&exit
-
- :yue
- set "r=!rm:~%w%,1!"
- set /a yue=!random!%%12+1
- if !.%r%%yue%! geq !%r%%yue%! goto yue
- set /a .%r%%yue%+=1,riqi=!%r%%yue%!,!r!+=1,rz=!r!
- if !rz! geq 365 set /a c-=1&set rm=!rm:%r%=!
- :ri
- set /a ri=!random!%%!riqi!+1,gz="~!f!gz+1"
- if defined !r!2009-!yue!-!ri! goto ri
- set !r!2009-!yue!-!ri!=a
- echo !r!%tab%!gz!%tab%2009-!yue!-!ri!
- goto :eof
复制代码
::生成汇总表 略作界面美化
- @echo off&setlocal enabledelayedexpansion
- for /f "skip=1 tokens=1-3 delims= " %%a in (b.txt) do (
- for /f "tokens=2 delims=-" %%i in ("%%c") do set /a %%a%%i+=%%b,.%%i+=%%b
- )
- for %%a in (一 二 三 四 五 六 七 八 九 十 十一) do (
- set "str=%%a "&set "str2=!str2! !str:~0,5!"
- )
- (echo. !str2!十二
- for %%a in (甲 乙 丙 丁 戊 己 庚 辛 壬 癸) do (
- set "var="
- for /l %%i in (1 1 12) do (
- set "num=!%%a%%i! "
- set "var=!var! !num:~0,6!"
- )
- echo %%a !var!
- )
- for /f "tokens=2 delims==" %%a in ('set .') do (
- set "num=%%a "
- set hj=!hj! !num:~0,6!
- )
- echo.&echo 合计 !hj!)>c.txt
- start c.txt
复制代码
|