中国DOS联盟论坛

中国DOS联盟

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

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

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

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『楼 主』:  出给新手的题(加分题)

随机生成互不相同的100个0-99的数字,唯一要求代码要高效。

[ Last edited by zw19750516 on 2008-7-20 at 10:06 AM ]



批处理之家新域名:www.bathome.net
2008-7-20 10:01
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
obsolete
初级用户





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

试试

@echo off
setlocal enabledelayedexpansion

for /l %%i in (0,1,99) do set cell_%%i=%%i
set last=99

:loop
set /a mod=%last%+1
if %mod%==0 goto :pause
set /a index=%random% %% %mod%
echo !cell_%index%!
set cell_%index%=!cell_%last%!
set /a last=%last%-1
goto :loop

:pause
pause

[ Last edited by obsolete on 2008-7-20 at 11:52 AM ]

   此帖被 +12 点积分      点击查看详情   
评分人:【 bat-zw 分数: +10  时间:2008-7-20 14:02
评分人:【 523066680 分数: +2  时间:2008-7-20 16:23


2008-7-20 11:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 3 楼』:  

修改一下:
@echo off
for /l %%i in (0,1,99) do set cell_%%i=%%i
set last=100
:loop
set /a index=%random%%%%last%
call,echo %%cell_%index%%%
if %last% neq 100 call,set "cell_%index%=%%cell_%last%%%"
set /a last-=1
if %last% neq 1 goto :loop
pause>nul
[ Last edited by zw19750516 on 2008-7-20 at 02:18 PM ]



批处理之家新域名:www.bathome.net
2008-7-20 14:04
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
obsolete
初级用户





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



  Quote:
Originally posted by zw19750516 at 2008-7-20 14:04:
修改一下:
[code]
@echo off
for /l %%i in (0,1,99) do set cell_%%i=%%i
set last=100
:loop
set /a index=%random%%%%last%
call,echo %%cell_%index%%%
if %last% neq 100 call,set "cell_% ...

学习了

2008-7-20 14:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
523066680
银牌会员

SuperCleaner


积分 2362
发帖 1133
注册 2008-2-2
状态 离线
『第 5 楼』:  看我多直接

-----%time%的后面两个数变的好快,应该能当作随机的吧


echo %time:~9,2%



让我给一个进步的题目吧:取100个随机数字

注意哦:如果一路echo %time:~9,2%给出的话,就会是有序的了,
          等有几个人回贴后,我就会公布我个人的思路了(搞不好会和大家一样哦)

[ Last edited by 523066680 on 2008-7-20 at 03:23 PM ]

2008-7-20 15:10
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (523066680)  编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 6 楼』:  

我也来凑热闹:

  Quote:
@echo off
for /l %%a in (1 1 100) do call :echo_
echo.&pause&goto :eof
:echo_
set /a "mo=%random%%%100"
if defined %mo% goto :echo_
set /a n+=1
set /p=%mo% <nul
set "%mo%=niuming"



   此帖被 +2 点积分      点击查看详情   
评分人:【 523066680 分数: +2  时间:2008-7-20 15:57


2008-7-20 15:39
查看资料  发短消息 网志   编辑帖子  回复  引用回复
523066680
银牌会员

SuperCleaner


积分 2362
发帖 1133
注册 2008-2-2
状态 离线
『第 7 楼』:  ^^

               羡慕!!!今天遇到高人了!!!大家抓住他们 !有问题要一起问哈!!
------基本看不出啊!一个头两个大--------

(好一部分我都没看懂啊,不过想想 我的短一些!!高兴!!)




哼!看我的!!刚改过 速度很慢 想快点关的话 记得ctrl+c,直接关很卡的
随机性也不大好

@echo off&setlocal enabledelayedexpansion
for /l %%a in (1,1,100) do (
for /l %%b in (1,1,%time:~10,1%) do (ping -n>nul)
echo !time:~9,2!
)
pause

我的思路好象靠不住哦

[ Last edited by 523066680 on 2008-7-20 at 04:10 PM ]

2008-7-20 15:46
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (523066680)  编辑帖子  回复  引用回复
523066680
银牌会员

SuperCleaner


积分 2362
发帖 1133
注册 2008-2-2
状态 离线
『第 8 楼』:  

其他会员也要多想想不同思路滴! 我发现最近大家发的贴 只要有一个人发出
解决方案后  帖子就慢慢沉了,大家要勇于创新啊!

2008-7-21 07:34
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (523066680)  编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


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

随机交换的老算法讨论过很多次
代码也写了一大堆
在这就不提了

另外出一个新算法
原始构思来自一个mp3随机播放列表问题的讨论
跟2、3楼的比较接近
不过要简单多了
@echo off & setlocal
for /l %%i in (0,1,99) do call set #%%random%%%%random%%%%random%%=%%i
for /f "tokens=2 delims==" %%s in ('set #') do echo %%s
变量延迟版
@echo off & setlocal EnableDelayedExpansion
for /l %%i in (0,1,99) do set #!random!!random!!random!=%%i
for /f "tokens=2 delims==" %%s in ('set #') do echo.%%s
[ Last edited by qzwqzw on 2008-7-21 at 12:01 PM ]

   此帖被 +15 点积分       点击查看详情   
评分人:【 bat-zw 分数: +10  时间:2008-7-21 15:24
评分人:【 523066680 分数: +3  时间:2008-7-21 15:27
评分人:【 obsolete 分数: +2  时间:2008-7-21 21:19


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

天的白色影子


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

将数量级设置到0~10000
挑战性便增强很多了!

将3楼代码数量级改为10000
输出重定向到文本文件
测试花了不到5分钟
而且结果出现了偏差
少了两个数658、5560
重复了一个数5785

[ Last edited by qzwqzw on 2008-7-21 at 03:41 PM ]

2008-7-21 15:18
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 11 楼』:  

这两天老总来检查,差点没累死人:
@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!%%100
    call,set b=%%.!a!%%
    set .!a!=!.%%i!
    set .%%i=!b!
)
set .
pause>nul


   此帖被 +2 点积分    点击查看详情   
评分人:【 obsolete 分数: +2  时间:2008-7-21 21:20




批处理之家新域名:www.bathome.net
2008-7-21 15:23
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 12 楼』:  



  Quote:
Originally posted by qzwqzw at 2008-7-21 11:52:
随机交换的老算法讨论过很多次
代码也写了一大堆
在这就不提了

另外出一个新算法
原始构思来自一个mp3随机播放列表问题的讨论
跟2、3楼的比 ...

虽然不是新手了,但为兄的思路所赞叹,所以加分。



批处理之家新域名:www.bathome.net
2008-7-21 15:26
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
523066680
银牌会员

SuperCleaner


积分 2362
发帖 1133
注册 2008-2-2
状态 离线
『第 13 楼』:  

我的思路居然没人看……………………………………
不过我觉得如果说只要一个随机数的话 echo %time:~9,2% 是最简便的

[ Last edited by 523066680 on 2008-7-21 at 03:44 PM ]



综合型编程论坛

我的作品索引
  
2008-7-21 15:41
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (523066680)  编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 14 楼』:  



  Quote:
Originally posted by qzwqzw at 2008-7-21 15:18:
将数量级设置到0~10000
挑战性便增强很多了!

将3楼代码数量级改为10000
输出重定向到文本文件
测试花了不到5分钟
而且结果出现了偏差
少了两个 ...

我三楼的仅是对二楼的修改,但代码从理论上应该是没问题的,为什么会出现错误还有待详细分析。



批处理之家新域名:www.bathome.net
2008-7-21 15:55
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 15 楼』:  



  Quote:
Originally posted by 523066680 at 2008-7-21 15:41:
我的思路居然没人看……………………………………:(
不过我觉得如果说只要一个随机数的话 echo %time:~9,2% 是最简便的

[ Last edited by 523066680 on 2008-7-21 at 03:44 PM ]

这种方法是存在很大局限性的(如要显示一个在0-999内的随机数呢),同时要直接产生一个在0-99内的随机数就set /a  a=%random%%%100就可以了啊。



批处理之家新域名:www.bathome.net
2008-7-21 15:59
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: