中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-09 05:19
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 出给新手的题(加分题) 查看 1,941 回复 18
16 发表于 2008-07-21 17:48 ·  中国 山西 电信
银牌会员
★★★
天的白色影子
积分 2,343
发帖 636
注册 2004-03-06 00:00
22年会员
UID 19350
性别 男
状态 离线
3楼代码的问题在与边界定义问题


第一次执行:loop时
假设index获得99
则输出99
last减为99

第二轮loop:
假设index=rnd % 99得1
则输出1
在if句因为last=99<>100
则cell_1=99
(此处已经出错!)
last减为98

第三轮loop
index=rnd % 98
假设再得1
输出%cell_1%
此时错误彻底暴露
99被重复输出
17 发表于 2008-07-21 18:23 ·  中国 山西 电信
银牌会员
★★★
天的白色影子
积分 2,343
发帖 636
注册 2004-03-06 00:00
22年会员
UID 19350
性别 男
状态 离线
修正后的代码

@echo off
for /l %%i in (0,1,9999) do set cell_%%i=%%i
set last=10000

:loop
set /a index=%random% %% %last%
set /a last-=1
call echo %%cell_%index%%% >>4l.txt
call set "cell_%index%=%%cell_%last%%%"
if %last% gtr 0 goto :loop
pause>nul
18 发表于 2008-07-21 20:46 ·  中国 浙江 杭州 电信
初级用户
★★
积分 192
发帖 72
注册 2005-07-31 21:10
21年会员
UID 41234
状态 离线
学习~几个算法都是线性的,取决于系数,也就是获取每个数值的时间。

PS:请教,我觉得每次都输出到文件应该会严重影响结果,毕竟IO操作是最费时间的,发现事实并不是这样。

[ Last edited by obsolete on 2008-7-21 at 09:17 PM ]
19 发表于 2008-07-21 21:13 ·  中国 浙江 杭州 电信
初级用户
★★
积分 192
发帖 72
注册 2005-07-31 21:10
21年会员
UID 41234
状态 离线
Originally posted by zw19750516 at 2008-7-21 15:23:
这两天老总来检查,差点没累死人:

@echo off&setlocal enabledelayedexpansion
for /l %%i in (0,1,99) do set .%%i=%%i
for /l %%i in (0,1,99) do (
set /a a=!random!%% ...



看懂了

[ Last edited by obsolete on 2008-7-21 at 09:24 PM ]
论坛跳转: