Board logo

标题: 批处理模拟算命先生的猜姓氏把顺序打乱 [打印本页]

作者: xxx3212    时间: 2008-1-16 21:03     标题: 批处理模拟算命先生的猜姓氏把顺序打乱

在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
复制代码


主要目的就是要把顺序打乱
作者: xxx3212    时间: 2008-1-16 21:17

呵呵 我想对高手都有点难度吧
作者: oumi168    时间: 2008-1-17 16:28

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

[ 本帖最后由 oumi168 于 2008-1-17 16:31 编辑 ]
作者: xxx3212    时间: 2008-1-17 23:38

到现在都没有高手回答 可见 此题的难度
作者: 随风    时间: 2008-1-18 00:25

代码确实是很经典,思路是把每一个姓氏都定义为变量,最后再显示这个变量。
楼主想问的是什么?
作者: xxx3212    时间: 2008-1-18 01:29

就是想把顺序打乱
作者: namejm    时间: 2008-1-18 12:58

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

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

就是这样撒
作者: youxi01    时间: 2008-1-18 17:55

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

测试代码(专门打乱姓氏顺序的一段代码):
  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
复制代码

作者: xxx3212    时间: 2008-1-18 22:49

运行结果
  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. 或批处理文件。
复制代码

作者: 随风    时间: 2008-1-18 23:00

将百家姓乱序?好像没有什么意义,但是要做到也不难.
:
  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 编辑 ]
作者: foxJL    时间: 2008-1-19 02:18

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

确实,
难怪排列出现了问题,原来是这样。
作者: xxx3212    时间: 2008-1-19 22:38

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

[ 本帖最后由 xxx3212 于 2008-1-19 22:40 编辑 ]
作者: xxx3212    时间: 2008-1-19 22:43

你写的代码 确实经典 利用随机数字 再对它进行排序 最后输出
作者: ddyxxt    时间: 2008-1-21 03:44

本帖最后由 ddyxxt 于 2011-10-26 01:53 编辑

中华人民共和国万岁




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2