中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-10 18:31
47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行
DOS批处理 & 脚本技术(批处理室) » [求助]谁能写一个类似街头"猜姓氏"的批处理
可打印版本  4,715 / 17
第1楼 jmz573515 发表于 2007-01-06 04:14
银牌会员 发帖 464 积分 1,212
[求助]谁能写一个类似街头"猜姓氏"的批处理
以前我看过有人在街头用几张写了"姓氏"(有的可能也不是姓氏)卡片,只要你指出你的姓氏在哪两张卡片里,所谓"算命"人就能指出你的姓氏,到现在也没有弄清楚是什么原理,希望哪位能写一个这样的批处理(VBS),再说一下是什么原理,谢谢!
第2楼 vkill 发表于 2007-01-06 05:31
金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽
说的不够清楚,我也没有见过
第3楼 namejm 发表于 2007-01-06 06:25
荣誉版主 发帖 1,737 积分 5,226 来自 成都
  原理似乎是这样:两张卡片中,其中一张的内容绝对不可能作为姓氏出现。
第4楼 NaturalJ0 发表于 2007-01-06 06:29
银牌会员 发帖 533 积分 1,181
似乎挺有意思,小时候看过,但不知道原理。
第5楼 qzwqzw 发表于 2007-01-06 14:56
银牌会员 发帖 636 积分 2,343
实际上这是一个表的编码与解码问题

所有的姓氏构成一个表

其中的每个姓氏都是其中的一个项

如何对表项进行编码以利于快速解码(或者叫索引)有很多方法

---------------------------------

最简单的是顺序编号,然后按编号顺序解码或索引

但效率最低,最差情况下可能要遍历整个表

没有一个算命师会这样干的

--------------------------------------------------

再复杂一些的就是二维编码,然后按维度值索引

效率相对高一些,最差情况下要索引二个维度的总和

比如一个有100项的表,可以分解为10*10的二维矩阵

此时最差要索引10+10次

有些现代的低级算命师采用类似的算法

很容易被人识破

-------------------------------------

更复杂一些的就是二进制编码,实际上它是一种多维编码

将二维的长度数变为维度数

比如一个100项的表会被分解为2*2*2*2*2*2*2的多维矩阵

对矩阵的索引就是一个七位的二进制数

每次索引都需要七次,没有最好最坏的说法

大多数算命师是采用这种方法或者其变形

-----------------------------------------------------------

有些算命师只让人看三四张表便能确定姓氏

另外很多情况下只要确定两张表中有姓氏项就可以确定姓氏

这是因为他们将频率较高的姓氏采用了更短的编码

在这方面做得比较有名的算法是霍夫曼树生成

根据各项的概率确定其编码,频率最高的码长最短

-----------------------------------------------------------------

下面是一个表的编码与解码的例子

为了算法的简便,仅采用了文中的第三种方法

如果它读取的table.txt是个每行含有一个姓氏的文本文件

那么它就是一个猜姓氏的程序

至于姓氏表,我是从下面给出新百家姓经过简单替换得到的

http://zhidao.baidu.com/question/5479397.html



第6楼 lxmxn 发表于 2007-01-06 16:20
版主 发帖 4,938 积分 11,386
Originally posted by qzwqzw at 2007-1-6 01:56:
实际上这是一个表的编码与解码问题

所有的姓氏构成一个表

其中的每个姓氏都是其中的一个项

如何对表项进行编码以利于快速解码(或者叫素...

  不得不佩服兄的编程水平,但是我在测试的时候,出现了一点小问题。

  当我以“有”为姓氏时,这段代码判断为我姓“施”,不知何故。

  我的 table.txt 文件如下:
第7楼 qzwqzw 发表于 2007-01-06 23:13
银牌会员 发帖 636 积分 2,343
没想到真有人将table表发上来

我测试时的表仅100行也没敢往上发

太占阅读空间了

-----------------------------------------------------

“有”的问题是你挑花了眼

请注意有无顺序分别是

y y y n y n n n n y

将这个顺序反过来

再将y变为1,n变为0

就是1000010111

转换为十进制就是535

它就是“有”的行编号

--------------------------------------------------------

另外,你的表很有问题

因为没有正确的处理复姓和一些冗余字

造成了重复项的出现

而这会影响项的索引,造成判断失误

而且老百家姓的表太大了

需要九次判断,很容易让人不耐烦的

而且表的编码速度也被降低了
第8楼 lxmxn 发表于 2007-01-07 01:23
版主 发帖 4,938 积分 11,386
Originally posted by qzwqzw at 2007-1-6 10:13:
没想到真有人将table表发上来

我测试时的表仅100行也没敢往上发

太占阅读空间了

-----------------------------------------------------

“有”的问题是你 ...


  的确。

  当初测试的时候,也只是将百度知道吧页面上的姓氏表复制下来,然后自己写了一个批处理生成了这个 table.txt 文件,并没有考虑复性和冗余的姓氏。

  兄的这个批程序的算法值得学习啊。
第9楼 jmz573515 发表于 2007-01-07 05:45
银牌会员 发帖 464 积分 1,212
不错,可是这个和我以前写的猜年龄的原理是一样的。
我觉得“猜姓氏”的不是这个原理。(我记得是只要确认两次就能说出你的姓名)
不知道还有没有别更好的方法?
第10楼 26933062 发表于 2007-01-07 14:21
银牌会员 发帖 879 积分 2,268
其实原理很简单,我以前在街头见过,回来后用数字和我的同事玩,他们佩服的五体投地.
道理就一个,他给你看的两张表里,只有一个姓是重复的.
第11楼 tghksj 发表于 2007-01-07 23:29
社区乞丐 发帖 90 积分 -49
又是qzwqzw.....又有的看了.....痛苦啊~~......
第12楼 tghksj 发表于 2007-01-09 03:45
社区乞丐 发帖 90 积分 -49
lxmxn 老师,麻烦您能不能把您的table.txt附件一下,这样太眼晕了......

qzwqzw 老师 你把问题复杂化了

江湖术士根本不可能对表格进行多维编码.有您这样头脑是绝对不会做江湖术士的 :)

此题只不过是一个平面表格, "经线个数 * 纬线个数 = 网点个数"



[ Last edited by tghksj on 2007-1-8 at 03:31 PM ]
第13楼 52enjoy 发表于 2007-01-09 04:12
初级用户 发帖 8 积分 20
不要吧~~~看的我头大了~~~救命啊~~~~~
第14楼 lxmxn 发表于 2007-01-10 00:09
版主 发帖 4,938 积分 11,386
lxmxn 老师,麻烦您能不能把您的table.txt附件一下,这样太眼晕了......


  直接将我发的那段保存为table.txt文件就够了。


[ Last edited by lxmxn on 2007-1-9 at 11:11 AM ]
第15楼 tghksj 发表于 2007-01-10 03:25
社区乞丐 发帖 90 积分 -49
晕~不知道是不是我的表达能力有问题,

我说你这样占500多行的空间啊~~~能不能打成附件,别直接显示啊???

太占地方了~拉半天才能拉过去啊!!!



还有,保存什么啊?
你的那个表本身就有问题,根本是个错误的表,还叫我保存干什么?

[ Last edited by tghksj on 2007-1-9 at 02:27 PM ]
1 2  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023