中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
« [1] [2] [3] [4] »
作者:
标题: 随机显示5个不同的数 上一主题 | 下一主题
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『楼 主』:  随机显示5个不同的数

能不能一次显示出1-100随机的5位数,并且不能有重复的.
想了很久,也搜索了论坛里的大部分帖子,好像都没有同时显示5位数的,关键是还要不能重复,


不好意识,对不起各位了,看来我的表达能力确实有问题.
我的目的是  显示1-100的随机数,   一次同时显示5个 ,  并且显示的这5个数不能有重复的.这样说大家能理解了吗?


首先多谢各位的精彩答复,因本人的批处理水平实在太菜,有些高深的答复不太看的懂,所以若有错误的评价还请见谅.....................
1, 6楼的答复基本符号要求,但多次使用时偶而会出现死循环现象,不知什么原因.
2, 13楼的虽没有重复现象,但每次运行后的第一位数总是相同,总觉略有不妥之处.
3, 26楼的虽然也可用,但是觉得过于呆板,(对不起,可能用词不当,但想不出更婉转的词了,见谅!)比如我想显示6位或7,8,9..........位就太麻烦了,其实我的本意是先要求输入随机数的最大值,再输入显示的位数.
4, 个人感觉(从思路上来说)32楼的应该是最理想的,但可惜我看不懂,而32楼的这位兄弟又没把代码按要求写完,(一次显示了100个).
5, 我认为33楼的代码应该是最好的了,从代码上看,应该是绝对没重复,而且很灵活,只是不知道会不会出现他们说的效率低,和死循环.目前运行状况良好.[/
size]

不好意识 版主 经反复测试,你6楼的方法没问题,只是会出现死循环,可能是测试的方法太多了,搞错了对象,对不起了.  在42楼修改后的方法我认为以接近完美,真是条条大路通罗马,好方法太多了,批处理真是对人思路的挑战.

[ Last edited by 26933062 on 2007-1-6 at 10:07 PM ]

2007-1-4 16:12
查看资料  发短消息 网志   编辑帖子  回复  引用回复
a9319751
中级用户





积分 439
发帖 170
注册 2006-1-9
状态 离线
『第 2 楼』:  

5个?5位?
1-100 有5位



bat c c++
2007-1-4 20:42
查看资料  发送邮件  发短消息 网志  OICQ (5040366)  编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 3 楼』:  

5随机个1-99

1:
@echo off
:loop
cls
set random1=%random:~-2%

:loop2
set random2=%random:~-2%
if "%random2%" == "%random1%" goto loop2

:loop3
set random3=%random:~-2%
if "%random3%" == "%random1%" goto loop3
if "%random3%" == "%random2%" goto loop3

:loop4
set random4=%random:~-2%
if "%random4%" == "%random1%" goto loop4
if "%random4%" == "%random2%" goto loop4
if "%random4%" == "%random3%" goto loop4

:loop5
set random5=%random:~-2%
if "%random5%" == "%random1%" goto loop5
if "%random5%" == "%random2%" goto loop5
if "%random5%" == "%random3%" goto loop5
if "%random5%" == "%random4%" goto loop5

echo %random1% %random2% %random3% %random4% %random5%
pause
goto loop
2:
@echo off
:Start
cls
call :loop 1
call :loop 2
call :loop 3
call :loop 4
call :loop 5

echo %random1% %random2% %random3% %random4% %random5%
pause
set Tmp_=
goto :Start

:loop
set randomloop=%random:~-2%
for %%n in (%Tmp_%) do if "%randomloop%" == "%%n" goto loop
set random%1=%randomloop%
call set Tmp_=%%Tmp_%% %randomloop%
goto :eof
[ Last edited by zh159 on 2007-1-4 at 10:09 AM ]

2007-1-4 22:17
查看资料  发短消息 网志   编辑帖子  回复  引用回复
youxi01
高级用户




积分 846
发帖 247
注册 2006-10-27
来自 湖南==》广东
状态 离线
『第 4 楼』:  

来凑个“热闹”
@echo off
setlocal enabledelayedexpansion
set /a a=1

:test
    set /a _num!a!=%random:~-2%
    if not defined !_num%a%!  set /a a+=1
    if !a! LSS 6 goto :test

echo %_num1% %_num2% %_num3% %_num4% %_num5%

pause>nul


2007-1-4 23:45
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 5 楼』:  

  楼主的表达有问题,看了半天还不知道究竟是要生成1-99个不同的随机5位数还是在1-99中随机显示5个不同的数,请楼主表达清楚。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2007-1-5 01:52
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 6 楼』:  

  看了4楼的代码,推测 youxi01 的本意是想显示5个 1-100 之间(不包含100)不同的随机数,但是代码是有问题的:%a% 是 1-5 的数,用 if not defined 来判断 num%a% 这个变量是否被定义过,执行的结果始终是没有定义过。

  按照4楼的思路修改代码如下:
@echo off
set count=0

:loop
set /a num=%random%%%99+1
if not defined num%num% (
    set num%num%=%num%
    set /a count+=1
    call echo %%num%%
)
if %count% lss 5 goto loop

pause>nul
——————————————————————————————————————
  如果循环调用这段代码,在第20次的时候会陷入死循环,具体情况请看16楼的描述,原因分析请看41楼,解决问题的代码请看42楼。

[ Last edited by namejm on 2007-1-6 at 05:03 PM ]



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2007-1-5 02:16
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tghksj
社区乞丐

此图片另存后死机



积分 -49
发帖 90
注册 2006-12-2
状态 离线
『第 7 楼』:  

怀疑自己的理解能力和楼主表达能力

是5个 还是5位? 5个 1-100 如下:
@ECHO %dbg% OFF
setlocal ENABLEDELAYEDEXPANSION

FOR /L %%A IN (1,1,5) DO ECHO !RANDOM:~-2!




我的网络笔记本.[color=Red]非联系本人请勿访问![/color]http://w.vicp.net[img]http://zhenlove.com.cn/cndos/fileup/files/QM2.jpg[/img]
2007-1-5 03:05
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 8 楼』:  

  发现很多人都忽略了这样一个细节:%random:~-2% 有可能取到 00 这样的字符串,set /a num=%random:~-2% 虽然可以把 00 字符串数值化,变成0,但是,0却并不是楼主所想要的。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2007-1-5 03:33
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tghksj
社区乞丐

此图片另存后死机



积分 -49
发帖 90
注册 2006-12-2
状态 离线
『第 9 楼』:  

那OK,
%random:~-2%不行就%random:~0,2%

保证前面没0
@ECHO %dbg% OFF
setlocal ENABLEDELAYEDEXPANSION

FOR /L %%A IN (1,1,5) DO ECHO !RANDOM:~0,2!




我的网络笔记本.[color=Red]非联系本人请勿访问![/color]http://w.vicp.net[img]http://zhenlove.com.cn/cndos/fileup/files/QM2.jpg[/img]
2007-1-5 04:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ccwan
金牌会员




积分 2725
发帖 1160
注册 2006-9-23
来自 河北廊坊
状态 离线
『第 10 楼』:  

取得的5个数中有相同的算不算?



三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。
2007-1-5 04:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 11 楼』:  

  按照楼主的说法,5个数中不能出现相同的数。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2007-1-5 04:41
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ccwan
金牌会员




积分 2725
发帖 1160
注册 2006-9-23
来自 河北廊坊
状态 离线
『第 12 楼』:  

目前9楼的已发现有这种情况。



三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。
2007-1-5 04:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
tghksj
社区乞丐

此图片另存后死机



积分 -49
发帖 90
注册 2006-12-2
状态 离线
『第 13 楼』:  

OK!!!嵌套递归! 这下不重复了吧???呵呵
@ECHO %dbg% OFF
setlocal ENABLEDELAYEDEXPANSION
SET T=1

:PR
FOR /L %%A IN (%T%,1,5) DO (SET NO%%A=!RANDOM:~0,2! & SET /A H=%%A-1 & IF !H! GTR -1 (
FOR /L %%B IN (!H!,-1,1) DO (IF !NO%%A!==!NO%%B! (SET T=%%A & CALL :PR !T! & GOTO :EOF)))&ECHO !NO%%A!)
[ Last edited by tghksj on 2007-1-4 at 06:11 PM ]



我的网络笔记本.[color=Red]非联系本人请勿访问![/color]http://w.vicp.net[img]http://zhenlove.com.cn/cndos/fileup/files/QM2.jpg[/img]
2007-1-5 06:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
tghksj
社区乞丐

此图片另存后死机



积分 -49
发帖 90
注册 2006-12-2
状态 离线
『第 14 楼』:  

我晕~~我傻了,怎么没想起 if not defined
晕晕晕晕晕晕晕晕晕晕晕晕晕晕晕
@ECHO %dbg% OFF
setlocal ENABLEDELAYEDEXPANSION
CLS
SET T=1

:PR
FOR /L %%A IN (%T%,1,5) DO (
         SET NO%%A=!RANDOM:~0,2!
         IF DEFINED !NO%%A! (SET T=!%%A! & GOTO :PR)
         ECHO !NO%%A!
                            )
咦?????????不好使?????????????还是有重复的??!
高人解释下..............

暂时只有13楼可以了....

[ Last edited by tghksj on 2007-1-4 at 05:53 PM ]



我的网络笔记本.[color=Red]非联系本人请勿访问![/color]http://w.vicp.net[img]http://zhenlove.com.cn/cndos/fileup/files/QM2.jpg[/img]
2007-1-5 06:44
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 15 楼』:  

  看了14楼的代码,发现里面并没有控制随机数是否重复的语句,多测试几次之后,就会发现有重复数值出现,建议参考一下我在6楼帖出来的代码。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2007-1-5 06:58
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] [4] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: