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