中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
« [1] [2] »
作者:
标题: 出给新手的题(加分题) 上一主题 | 下一主题
qzwqzw
银牌会员

天的白色影子


积分 2342
发帖 635
注册 2004-3-6
状态 离线
『第 16 楼』:  

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被重复输出

2008-7-21 17:48
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


积分 2342
发帖 635
注册 2004-3-6
状态 离线
『第 17 楼』:  

修正后的代码
@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


2008-7-21 18:23
查看资料  发短消息 网志   编辑帖子  回复  引用回复
obsolete
初级用户





积分 192
发帖 72
注册 2005-7-31
状态 离线
『第 18 楼』:  

学习~几个算法都是线性的,取决于系数,也就是获取每个数值的时间。

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

[ Last edited by obsolete on 2008-7-21 at 09:17 PM ]

2008-7-21 20:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
obsolete
初级用户





积分 192
发帖 72
注册 2005-7-31
状态 离线
『第 19 楼』:  



  Quote:
Originally posted by zw19750516 at 2008-7-21 15:23:
这两天老总来检查,差点没累死人:
[code]
@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 ]

2008-7-21 21:13
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: