![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-07 20:04 |
共 48,041 主题排行 / 350,128 发帖 / 今日 3 篇 / 48,252 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 难题..将可能出现任意相同五个数字按要求错开 |
| 可打印版本 966 / 11 |
| 第1楼 zerocq | 发表于 2008-03-15 18:39 |
| 中级用户 发帖 196 积分 458 | |
|
难题..将可能出现任意相同五个数字按要求错开 五个0-9的数字,可能出现任意相同数字,分别放入A,B,C,D,E变量中
每次最少选取三个变量将变量中的数字+1 目标是让五个变量中的数字全部不相同 ![]() ![]() |
|
| 第2楼 zerocq | 发表于 2008-03-15 18:41 |
| 中级用户 发帖 196 积分 458 | |
|
给点思路也可以,vbs/bat不限
谢谢各位 |
|
| 第3楼 slore | 发表于 2008-03-15 18:54 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
你的目的是让5个数不同。你生成的时候就和前面去比较有没有,没有就保存……
你那种取3加1什么的根本不能保证得到你要的结果。 |
|
| 第4楼 HAT | 发表于 2008-03-16 02:01 |
| 版主 发帖 5,017 积分 9,023 | |
|
在批处理版块讨论这种纯算法的问题是不是有点...
|
|
| 第5楼 moniuming | 发表于 2008-03-17 17:02 |
| 银牌会员 发帖 574 积分 1,335 来自 广西 | |
|
这个能显示五个不同的数字
|
|
| 第6楼 wxcute | 发表于 2008-03-17 20:20 |
| 中级用户 发帖 211 积分 458 | |
|
这不跟我的猜数字中生成4个不同随机数很像 我很菜,只提供思路,按这个思路应该也可以搞定
|
|
| 第7楼 terse | 发表于 2008-03-18 02:32 |
| 银牌会员 发帖 946 积分 2,404 | |
|
@echo off
set str=0123456789 for %%i in (A B C D E) do call :loop %%i echo 取得的结果是%a% %b% %c% %d% %e% pause :loop set/a s=%random%%%9 if defined %s% goto loop call set %1=%%str:~%s%,1%%&set %s%=A |
|
| 第8楼 qzwqzw | 发表于 2008-03-18 14:06 |
| 银牌会员 发帖 636 积分 2,343 | |
|
在这了讨论纯算法有什么问题吗?
难道4楼的兄弟认为批处理就没有算法的应用吗? 只是以前已经讨论过的问题又开始讨论 而且又回到了初始讨论的阶段 似乎很多人都不喜欢搜索和拿来 获取互不相同的随机数 通常有两类算法 一类是循环探测算法 就像6楼和7楼提到的 随机取一个数 检查以前是否取过 是则再次随机取 否则赋给变量 这类算法最大的弊病在于 如果取值个数接近取值范围 则命中率将明显降低 比如在0~100中取100个互不相同的数 此类算法的效率将相当低 现在比较成熟且高效的算法应该是随机交换算法 也就是先生成一个顺序数列 然后依次对数列中的数进行随机交换 用多少个数就交换多少次 交换完成后 直接依次取数列前端的数即可 5楼的代码 可能是不熟悉批处理中的数列操作 而选用了echo+findstr的方式处理数列 看上去不太舒服 所以没有细究其中的算法 6楼的代码重复性较大 应该是对批处理中的循环应用还不是熟练 7楼的代码 set/a s=%random%%%9 似乎应该是 set/a s=%random%%%10 [ Last edited by qzwqzw on 2008-3-18 at 02:17 PM ] |
|
| 第9楼 26933062 | 发表于 2008-03-18 18:53 |
| 银牌会员 发帖 879 积分 2,268 | |
|
显示5个不重复的随机数,确实是讨论过的。关键是要避开重复。
方法一、 : 方法二、 : |
|
| 第10楼 zerocq | 发表于 2008-03-18 19:11 |
| 中级用户 发帖 196 积分 458 | |
|
问题是非自已生成随机数,是从外部获取的
获取五个数字后再最少选三+1进行错开 |
|
| 第11楼 bat-zw | 发表于 2008-03-18 19:52 |
| 金牌会员 发帖 1,276 积分 3,105 | |
|
这个可以轻松搞定的: |
|
| 第12楼 qzwqzw | 发表于 2008-03-19 18:38 |
| 银牌会员 发帖 636 积分 2,343 | |
|
现在的题目就比较有意思了
11楼的代码仍然不合题意 初步编写了一段代码 根据代码的执行结果 证明限定每个数只加一次1 则必然有些组合无法完成差异化 比如 1 1 2 2 3 |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |