第 16 楼
不为分数,给新人提供一个参考
发表于 2008-08-25 14:31 · 中国 广西 百色 中移铁通
银牌会员
★★★
永远的菜鸟
积分 1,335 发帖 574 注册 2007-11-27 12:50 18年会员 UID 103929 性别 男 来自 广西
状态 离线
@echo off
Setlocal Enabledelayedexpansion
set "var1=a b c d e f g h i j k l m n o p q r s t u v w x y z"
for /l %%a in (1 1 26) do (set "var2=!var2!%%a ")
for %%a in (%var1%) do (set /a "nn+=1"&set "!nn!=%%a"&set "%%a=!nn!")
echo %var1%&echo %var2%&echo.
:lp
set /a "bt=%random%%%26+1","aa=%random%%%2+1"
for /f "tokens=%bt%" %%a in ("!var%aa%!") do (
if defined .%%a goto :lp
if defined .!%%a! goto :lp
set "ech=!ech! %%a"
set ".%%a=ok"&set ".!%%a!=ok"
)
set /a mm+=1
if %mm% lss 10 goto :lp
echo %ech%
for %%a in (%var1%) do (set ".%%a="&set ".!%%a!=")
set "mm=0"&set "ech="
pause>nul&goto :lp
[
Last edited by moniuming on 2008-8-25 at 02:33 PM ]
本帖最近评分记录
(共 1 条)
点击查看详情
评分人 分数 时间
bat-zw
+8
2008-08-25 16:46
第 17 楼
发表于 2008-08-25 16:35 · 中国 广东 江门 电信
中级用户
★★
积分 338 发帖 175 注册 2007-10-21 15:30 18年会员 UID 100351 性别 男
状态 离线
第 18 楼
发表于 2008-08-25 16:48 · 中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105 发帖 1,276 注册 2008-03-08 13:00 18年会员 UID 112398 性别 男
状态 离线
16楼的代码使用了if判断返回,因此在一定意义上存在效率问题,代码也较为复杂,但还是予以加分鼓励了。
批处理之家新域名:www.bathome.net
第 19 楼
发表于 2008-08-25 16:58 · 中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105 发帖 1,276 注册 2008-03-08 13:00 18年会员 UID 112398 性别 男
状态 离线
下面给出本人的解:
@echo off&setlocal enabledelayedexpansion
for %%i in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
set /a n+=1,a=!random!%%2
if !a! equ 0 (
set "_!random!!random!!random!=!n!"
) else (
set "_!random!!random!!random!=%%i"
)
)
for /f "tokens=2 delims==" %%i in ('set _') do (
set /a n-=1
if !n! equ 15 pause>nul&goto :eof
set /p=%%i <nul
)
批处理之家新域名:www.bathome.net
第 20 楼
发表于 2008-08-25 20:03 · 中国 广东 江门 电信
中级用户
★★
积分 338 发帖 175 注册 2007-10-21 15:30 18年会员 UID 100351 性别 男
状态 离线
zw兄的代码真厉害...
能够写下注释吗?
能够讲解下思路是如何吗?
[ Last edited by BC on 2008-8-25 at 08:07 PM ]
第 21 楼
发表于 2008-08-25 23:16 · 中国 云南 昆明 电信
中级用户
★★
积分 220 发帖 99 注册 2008-06-26 15:12 18年会员 UID 120818 性别 男
状态 离线
斑竹大哥能讲解一下
set "_!random!!random!!random!=!n!"
) else (
set "_!random!!random!!random!=%%i"
三个随机数连在一起是什么意思啊?
第 22 楼
发表于 2008-08-26 13:08 · 中国 四川 泸州 电信
初级用户
★
积分 30 发帖 18 注册 2008-05-11 01:43 18年会员 UID 118377 性别 男
状态 离线
我是新手啊,不过我做了,意思完全符合题目要求!大家看看!
@echo off&setlocal enabledelayedexpansion
set char1=abcdefghijklmnopqrstuvwxyz
set char3=1
set num=0
:loop
set /a ran=%random%%%26
set char2=!char1:~%ran%,1!
set /a num1=%ran%+1
if %num% lss 10 (
echo %char3%|find "%char2%" 1>nul
if errorlevel 1 ( set char3=%char3%%char2%&echo %num1%--%char2%&set /a num+=1&goto loop ) else ( goto loop ) )
pause
第 23 楼
发表于 2008-08-26 13:24 · 中国 广东 深圳 电信
初级用户
★
积分 59 发帖 28 注册 2007-03-23 05:18 19年会员 UID 82622 性别 男
状态 离线
第 24 楼
发表于 2008-08-26 14:34 · 中国 四川 泸州 电信
初级用户
★
积分 30 发帖 18 注册 2008-05-11 01:43 18年会员 UID 118377 性别 男
状态 离线
@echo off&setlocal enabledelayedexpansion
set char1=abcdefghijklmnopqrstuvwxyz
set char3=1
set num=0
:loop
set /a ran=%random%%%26-------这句设置0--25 随机数字
set char2=!char1:~%ran%,1!-------这句取得随机数字所对应的字幕,比如随机数字5,那么对应的就是f,因为0对应与a
set /a num1=%ran%+1------这句是随机数字+1 这主要用后面的输出 1对应与a 作用
if %num% lss 10 ( -------这句是循环 循环10次
echo %char3%|find "%char2%" 1>nul -----这句判断这个随机数字是否已经产生过
if errorlevel 1 ( set char3=%char3%%char2%&echo %num1%--%char2%&set /a num+=1&goto loop ) else ( goto loop ) ) -------这句是接上句,如果曾经产生过这个随机数字,继续循环下一次,如果没有产生过,则循环计数+1,然后输出对应的数字和字母,然后在进行循环,这样可以去掉上次随机产生1,这次随机还是产生1这种情况,这样解析应该都理解了吧
pause
第 25 楼
发表于 2008-08-26 16:13 · 中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105 发帖 1,276 注册 2008-03-08 13:00 18年会员 UID 112398 性别 男
状态 离线
&&楼上兄弟的态度还是很认真的,值得称赞,但你的代码是不合题意的:
一、你生成的是一个对应关系,而这个对应关系本就是题目中事先给出的条件,并不需要再去生成;
二、根据你的代码只能生成10个互不同的纯数列或纯字母列,而题意是要求生成字母和数字组成并彼此间不存在对应关系的随机值列;
三、和前面其他的代码一样使用if判断+返回(在你的代码中表现为不累加计数),存在效率问题;
四、使用管道也降低了代码效率。
批处理之家新域名:www.bathome.net
论坛跳转:
— 请选择 —
站务公告 & 版主讨论
意见反馈 & 网友交流
DOS学习入门 & 精彩文章 (教学室)
DOS疑难解答 & 问题讨论 (解答室)
DOS启动盘 & LOGO技术 (启动盘室)
DOS批处理 & 脚本技术(批处理室)
DOS媒体世界 & 网络技术 (多媒体室)
DOS汉化世界 & 中文系统 (中文化室)
DOS开发编程 & 发展交流 (开发室)
DOS软件下载 & 游戏分享 (下载室)
GRUB4DOS、SYSLINUX及其它启动管理软件讨论专区
其它操作系统综合讨论区
WinPE、PowerShell及其它命令行系统专区
贴图灌水、文学娱乐专区
网络日志(Blog)
论坛回收站
├ 链接失效,待修正