[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

批处理模拟算命先生的猜姓氏把顺序打乱

在cs-dos联盟上看到一个“猜姓氏”的批处理
代码是这样写的
  1. @ECHO %dbg% OFF
  2. setlocal ENABLEDELAYEDEXPANSION
  3. MODE CON COLS=120 LINES=30
  4. SET BJX=赵 钱 孙 李 周 吴 郑 王 冯 陈 诸 卫 蒋 沈 韩 杨 朱 秦 尤 许 何 吕 施 张 孔 曹 严 华 金 魏 陶 姜 戚 谢 邹 喻 柏 水 窦 章 云 苏 潘 葛 奚 范 彭 郎 鲁 韦 昌 马 苗 凤 花 方 俞 任 袁 柳 酆 鲍 史 唐 费 廉 岑 薛 雷 贺 倪 汤 滕 殷 罗 毕 郝 邬 安 常 乐 于 时 傅 皮 卡 齐 康 伍 余 元 卜 顾 孟 平 黄 和 穆 萧 尹 姚 邵 堪 汪 祁 毛 禹 狄 米 贝 明 臧 计 伏 成 戴 谈 宋 茅 庞 熊 纪 舒 屈 项 祝 董 粱 杜 阮 蓝 闵 席 季 麻 强 贾 路 娄 危 江 童 颜 郭 梅 盛 林 刁 钟 徐 邱 骆 高 夏 蔡 田 樊 胡 凌 霍 虞 万 支 柯 咎 管 卢 莫 经 房 裘 缪 干 解 应 宗 丁 宣 贲 邓 郁 单 杭 洪 包 诸 左 石 崔 吉 钮 龚 程 嵇 邢 滑 裴 陆 荣 翁 荀 羊 於 惠 甄 魏 家 封 芮 羿 储 靳 汲 邴 糜 松 井 段 富 巫 乌 焦 巴 弓 牧 隗 山 谷 车 侯 宓 蓬 全 郗 班 仰 秋 仲 伊 宫 宁 仇 栾 暴 甘 钭 厉 戎 祖 武 符 刘 景 詹 束 龙 叶 幸 司 韶 郜 黎 蓟 薄 印 宿 白 怀 蒲 台 从 鄂 索 咸 籍 赖 卓 蔺 屠 蒙 池 乔 阴 郁 胥 能 苍 双 闻 莘 党 翟 谭 贡 劳 逄 姬 申 扶 堵 冉 宰 郦 雍 却 璩 桑 桂 濮 牛 寿 通 边 扈 燕 冀 郏 浦 尚 农 温 别 庄 晏 柴 翟 阎 充 慕 连 茹 习 宦 艾 鱼 容 向 古 易 慎 戈 廖 庚 终 暨 居 衡 步 都 耿 满 弘 匡 国 文 寇 广 禄 阙 东 殴 殳 沃 利 蔚 越 夔 隆 师 巩 厍 聂 晁 勾 敖 融 冷 訾 辛 阚 那 简 饶 空 曾 毋 沙 乜 养 鞠 须 丰 巢 关 蒯 相 查 后 荆 红 游 竺 权 逯 盖 益 桓 公 万俟 司马 上官 欧阳 夏侯 诸葛 闻人 东方 赫连 皇甫 尉迟 公羊 澹台 公冶 宗政 濮阳 淳于 单于 太叔 申屠 公孙 仲孙 轩辕 令狐 钟离 宇文 长孙 慕容 鲜于 闾丘 司徒 司空 亓官 司寇 仉督 子车 颛孙 端木 巫马 公西 漆雕 乐正 壤驷 公良 拓拔 夹谷 宰父 谷粱 晋楚 闫法 汝鄢 涂钦 段干 百里 东郭 南门 呼延 归海 羊舌 微生 岳帅 缑亢 况后 有琴 梁丘 左丘 东门 西门 商牟 佘佴 伯赏 南宫 墨哈 谯笪 年爱 阳佟
  5. SET J=0
  6. SET W=0
  7. ::对姓氏表进行22*22的经纬划分.每一个交叉点代表一个姓氏.
  8. FOR %%i IN (%BJX%) DO (
  9.                        IF !J! == 0 SET /P=!W!: <NUL
  10.                        SET /P=%%i <NUL
  11.                        SET J!J!W!W!=%%i
  12.                        CALL SET J!J!=%%J!J!%% %%i
  13.                        IF !J! == 21 (SET /A W+=1 & SET J=-1 & ECHO.)
  14.                        SET /a J+=1
  15.                        )
  16. ECHO. & SET /P W=请选择你的姓氏所在标签号: & CLS
  17. FOR /L %%i IN (0,1,21) DO (ECHO %%i: !J%%i!)
  18. ECHO. & SET /P J=请选择你的姓氏所在标签号: & CLS
  19. ECHO 你的姓氏为: !J%J%W%W%!
  20. pause
复制代码


主要目的就是要把顺序打乱

呵呵 我想对高手都有点难度吧

TOP

确实厉害,,,总算明白了,想当初去旅游时看到同事一个个被弄的一懵一懵的。。。原来 是这样的

[ 本帖最后由 oumi168 于 2008-1-17 16:31 编辑 ]

TOP

到现在都没有高手回答 可见 此题的难度

TOP

代码确实是很经典,思路是把每一个姓氏都定义为变量,最后再显示这个变量。
楼主想问的是什么?
技术问题请到论坛发帖求助!

TOP

就是想把顺序打乱

TOP

想把什么顺序打乱呢?如果你不把问题详细地描述清楚的话,那你就会有如下的感觉:
1、这个问题非常有难度
2、本论坛没有高手
实际上,我们一直没弄明白你到底要干什么。

TOP

我猜他的意思是:
他这里的姓氏是 根据 百家姓 里的顺序来的,他现在想把这个顺序,随机打乱
举例说明:赵 在这里是第一个位置,打乱就让它随机排在一个位置,可能是第二个,或者是第三...

TOP

就是这样撒

TOP

如果真的要写的话,只能这么说:不是写不出来,只是写出来的运行效率极低,版面极差,没什么应用价值...

测试代码(专门打乱姓氏顺序的一段代码):
  1. @ECHO %dbg% OFF
  2. setlocal ENABLEDELAYEDEXPANSION
  3. MODE CON COLS=120 LINES=30
  4. SET BJX=赵 钱 孙 李 周 吴 郑 王 冯 陈 诸 卫 蒋 沈 韩 杨 朱 秦 尤 许 何 吕 施 张 孔 曹 严 华 金 魏 陶
  5. 姜 戚 谢 邹 喻 柏 水 窦 章 云 苏 潘 葛 奚 范 彭 郎 鲁 韦 昌 马 苗 凤 花 方 俞 任 袁 柳 酆 鲍 史 唐 费
  6. 廉 岑 薛 雷 贺 倪 汤 滕 殷 罗 毕 郝 邬 安 常 乐 于 时 傅 皮 卡 齐 康 伍 余 元 卜 顾 孟 平 黄 和 穆 萧
  7. 尹 姚 邵 堪 汪 祁 毛 禹 狄 米 贝 明 臧 计 伏 成 戴 谈 宋 茅 庞 熊 纪 舒 屈 项 祝 董 粱 杜 阮 蓝 闵 席
  8. 季 麻 强 贾 路 娄 危 江 童 颜 郭 梅 盛 林 刁 钟 徐 邱 骆 高 夏 蔡 田 樊 胡 凌 霍 虞 万 支 柯 咎 管 卢
  9. 莫 经 房 裘 缪 干 解 应 宗 丁 宣 贲 邓 郁 单 杭 洪 包 诸 左 石 崔 吉 钮 龚 程 嵇 邢 滑 裴 陆 荣 翁 荀
  10. 羊 於 惠 甄 魏 家 封 芮 羿 储 靳 汲 邴 糜 松 井 段 富 巫 乌 焦 巴 弓 牧 隗 山 谷 车 侯 宓 蓬 全 郗 班
  11. 仰 秋 仲 伊 宫 宁 仇 栾 暴 甘 钭 厉 戎 祖 武 符 刘 景 詹 束 龙 叶 幸 司 韶 郜 黎 蓟 薄 印 宿 白 怀 蒲
  12. 台 从 鄂 索 咸 籍 赖 卓 蔺 屠 蒙 池 乔 阴 郁 胥 能 苍 双 闻 莘 党 翟 谭 贡 劳 逄 姬 申 扶 堵 冉 宰 郦
  13. 雍 却 璩 桑 桂 濮 牛 寿 通 边 扈 燕 冀 郏 浦 尚 农 温 别 庄 晏 柴 翟 阎 充 慕 连 茹 习 宦 艾 鱼 容 向
  14. 古 易 慎 戈 廖 庚 终 暨 居 衡 步 都 耿 满 弘 匡 国 文 寇 广 禄 阙 东 殴 殳 沃 利 蔚 越 夔 隆 师 巩 厍
  15. 聂 晁 勾 敖 融 冷 訾 辛 阚 那 简 饶 空 曾 毋 沙 乜 养 鞠 须 丰 巢 关 蒯 相 查 后 荆 红 游 竺 权 逯 盖
  16. 益 桓 公 万俟 司马 上官 欧阳 夏侯 诸葛 闻人 东方 赫连 皇甫 尉迟 公羊 澹台 公冶 宗政 濮阳 淳于 单于 太
  17. 叔 申屠 公孙 仲孙 轩辕 令狐 钟离 宇文 长孙 慕容 鲜于 闾丘 司徒 司空 亓官 司寇 仉督 子车 颛孙 端木 巫
  18. 马 公西 漆雕 乐正 壤驷 公良 拓拔 夹谷 宰父 谷粱 晋楚 闫法 汝鄢 涂钦 段干 百里 东郭 南门 呼延 归海 羊
  19. 舌 微生 岳帅 缑亢 况后 有琴 梁丘 左丘 东门 西门 商牟 佘佴 伯赏 南宫 墨哈 谯笪 年爱 阳佟
  20. for %%i in (%BJX%) do (
  21.    set/a num+=1
  22.    set str!num!=%%i
  23. )
  24. for /l %%i in (1 1 %num%) do (
  25.    set/a num_=!random! %% %num%+1
  26.    set var=!str%%i!
  27.    call set str%%i=%%str!num_!%%
  28.    set str!num_!=!var!
  29. )
  30. for /l %%i in (1 1 %num%) do set /p=!str%%i! <nul
  31. pause
复制代码

TOP

运行结果
  1. '廉' 不是内部或外部命令,也不是可运行的程序
  2. 或批处理文件。
  3. '尹' 不是内部或外部命令,也不是可运行的程序
  4. 或批处理文件。
  5. '季' 不是内部或外部命令,也不是可运行的程序
  6. 或批处理文件。
  7. '莫' 不是内部或外部命令,也不是可运行的程序
  8. 或批处理文件。
  9. '羊' 不是内部或外部命令,也不是可运行的程序
  10. 或批处理文件。
  11. '仰' 不是内部或外部命令,也不是可运行的程序
  12. 或批处理文件。
  13. '台' 不是内部或外部命令,也不是可运行的程序
  14. 或批处理文件。
  15. '雍' 不是内部或外部命令,也不是可运行的程序
  16. 或批处理文件。
  17. '古' 不是内部或外部命令,也不是可运行的程序
  18. 或批处理文件。
  19. '聂' 不是内部或外部命令,也不是可运行的程序
  20. 或批处理文件。
  21. '益' 不是内部或外部命令,也不是可运行的程序
  22. 或批处理文件。
  23. '叔' 不是内部或外部命令,也不是可运行的程序
  24. 或批处理文件。
  25. '马' 不是内部或外部命令,也不是可运行的程序
  26. 或批处理文件。
  27. '舌' 不是内部或外部命令,也不是可运行的程序
  28. 或批处理文件。
复制代码

TOP

将百家姓乱序?好像没有什么意义,但是要做到也不难.
:
  1. @ECHO %dbg% OFF
  2. setlocal ENABLEDELAYEDEXPANSION
  3. if not "%1"==":" (
  4.    for /f "delims=" %%a in ('"%~0" :^|sort') do (
  5.      for /f "tokens=2" %%b in ("%%a") do set bjx=!bjx! %%b
  6.     )
  7.    goto loop
  8. )
  9. SET var=赵 钱 孙 李 周 吴 郑 王 冯 陈 诸 卫 蒋 沈 韩 杨 朱 秦 尤 许 何 吕 ^
  10. 施 张 孔 曹 严 华 金 魏 陶 姜 戚 谢 邹 喻 柏 水 窦 章 云 苏 潘 葛 奚 范 彭 ^
  11. 郎 鲁 韦 昌 马 苗 凤 花 方 俞 任 袁 柳 酆 鲍 史 唐 费 廉 岑 薛 雷 贺 倪 汤 ^
  12. 滕 殷 罗 毕 郝 邬 安 常 乐 于 时 傅 皮 卡 齐 康 伍 余 元 卜 顾 孟 平 黄 和 ^
  13. 穆 萧 尹 姚 邵 堪 汪 祁 毛 禹 狄 米 贝 明 臧 计 伏 成 戴 谈 宋 茅 庞 熊 纪 ^
  14. 舒 屈 项 祝 董 粱 杜 阮 蓝 闵 席 季 麻 强 贾 路 娄 危 江 童 颜 郭 梅 盛 林 ^
  15. 刁 钟 徐 邱 骆 高 夏 蔡 田 樊 胡 凌 霍 虞 万 支 柯 咎 管 卢 莫 经 房 裘 缪 ^
  16. 干 解 应 宗 丁 宣 贲 邓 郁 单 杭 洪 包 诸 左 石 崔 吉 钮 龚 程 嵇 邢 滑 裴 ^
  17. 陆 荣 翁 荀 羊 於 惠 甄 魏 家 封 芮 羿 储 靳 汲 邴 糜 松 井 段 富 巫 乌 焦 ^
  18. 巴 弓 牧 隗 山 谷 车 侯 宓 蓬 全 郗 班 仰 秋 仲 伊 宫 宁 仇 栾 暴 甘 钭 厉 ^
  19. 戎 祖 武 符 刘 景 詹 束 龙 叶 幸 司 韶 郜 黎 蓟 薄 印 宿 白 怀 蒲 台 从 鄂 ^
  20. 索 咸 籍 赖 卓 蔺 屠 蒙 池 乔 阴 郁 胥 能 苍 双 闻 莘 党 翟 谭 贡 劳 逄 姬 ^
  21. 申 扶 堵 冉 宰 郦 雍 却 璩 桑 桂 濮 牛 寿 通 边 扈 燕 冀 郏 浦 尚 农 温 别 ^
  22. 庄 晏 柴 翟 阎 充 慕 连 茹 习 宦 艾 鱼 容 向 古 易 慎 戈 廖 庚 终 暨 居 衡 ^
  23. 步 都 耿 满 弘 匡 国 文 寇 广 禄 阙 东 殴 殳 沃 利 蔚 越 夔 隆 师 巩 厍 聂 ^
  24. 晁 勾 敖 融 冷 訾 辛 阚 那 简 饶 空 曾 毋 沙 乜 养 鞠 须 丰 巢 关 蒯 相 查 ^
  25. 后 荆 红 游 竺 权 逯 盖 益 桓 公 万俟 司马 上官 欧阳 夏侯 诸葛 闻人 东方 赫连 皇甫 ^
  26. 尉迟 公羊 澹台 公冶 宗政 濮阳 淳于 单于 太叔 申屠 公孙 仲孙 轩辕 令狐 钟离 宇文 长孙 ^
  27. 慕容 鲜于 闾丘 司徒 司空 亓官 司寇 仉督 子车 颛孙 端木 巫马 公西 漆雕 乐正 壤驷 公良 ^
  28. 拓拔 夹谷 宰父 谷粱 晋楚 闫法 汝鄢 涂钦 段干 百里 东郭 南门 呼延 归海 羊舌 微生 岳帅 ^
  29. 缑亢 况后 有琴 梁丘 左丘 东门 西门 商牟 佘佴 伯赏 南宫 墨哈 谯笪 年爱 阳佟
  30. for %%i in (!var!) do echo !random! %%i
  31. goto :eof
  32. :loop
  33. MODE CON COLS=120 LINES=30
  34. SET J=0
  35. SET W=0
  36. for %%i in (!BJX!) do (
  37.                        IF !J! == 0 SET /P=!W!: <NUL
  38.                        SET /P=%%i <NUL
  39.                        SET J!J!W!W!=%%i
  40.                        CALL SET J!J!=%%J!J!%% %%i
  41.                        IF !J! == 21 (SET /A W+=1 & SET J=-1 & ECHO.)
  42.                        SET /a J+=1
  43.                        )
  44. ECHO. & SET /P W=请选择你的姓氏所在标签号: & CLS
  45. FOR /L %%i IN (0,1,21) DO (ECHO %%i: !J%%i!)
  46. ECHO. & SET /P J=请选择你的姓氏所在标签号: & CLS
  47. ECHO 你的姓氏为: !J%J%W%W%!
  48. pause
复制代码
11楼说的情况是因为,百家姓都在一行,太长,论坛处理时出的错,用上foxjl 班主用过的^续行符号就好了

[ 本帖最后由 随风 于 2008-1-19 14:30 编辑 ]
1

评分人数

技术问题请到论坛发帖求助!

TOP

有一点小小问题
  1. SET var=赵 钱 孙 李 周 吴 郑 王 冯 陈 诸 卫 蒋 沈 韩 杨 朱 秦 尤 许 何 吕^
  2. 施 张 孔 曹 严 华 金 魏 陶 姜 戚 谢 邹 喻 柏 水 窦 章 云 苏 潘 葛 奚 范 彭^
复制代码
你这里的^符号前或下一行前要空格,不然"吕 施"会变成"吕施"了.

TOP

回复 13# 的帖子

确实,
难怪排列出现了问题,原来是这样。
技术问题请到论坛发帖求助!

TOP

要把两次显示都打乱 而你才打乱了第一次

[ 本帖最后由 xxx3212 于 2008-1-19 22:40 编辑 ]

TOP

返回列表