卡片猜姓氏的原理

卡片猜姓氏的原理

神秘的 7 张卡片

在街头巷尾,或是一些趣味活动中,我们有时会看到这样一种神奇的游戏:有人拿出 7 张卡片,每张卡片上都密密麻麻写满了姓氏。参与者只需观察这 7 张卡片,指出自己姓氏所在的卡片,对方就能瞬间说出你的姓氏。这看似神奇的 “读心术”,背后究竟隐藏着怎样的奥秘呢?接下来,就让我们一起揭开它神秘的面纱。

演示案例

可能你对卡片猜姓氏的过程还不清楚,这里有一个直观的演示案例,如下所示:

卡片猜姓氏演示视频

这个视频用的是微信小程序【子由图库】里面的“姓氏猜猜乐”,它将卡片猜姓氏做到了小程序里,原理是一样的。

生活中的计数方式

在了解 7 张卡片猜姓氏的原理之前,我们先来聊聊日常生活中最常用的计数方式 —— 十进制。我们从 0 数到 9,当数到 9 之后,就会产生进位,变成 10,然后继续 11、12…… 这样的计数方式,每一位上的数字满 10 就向前进一位,这就是十进制的基本规则。比如数字 35,它表示 3 个十和 5 个一,这里的 “十” 就是十进制的基数。

二进制是什么

而二进制,和十进制类似,只是它的基数是 2。在二进制里,只有 0 和 1 这两个数字。当数到 1 之后,再增加 1,就会产生进位,变成 10 。这里的 10 可不是十进制里的 “十”,它在二进制里表示的是 2。再往后数,11 表示 3,100 表示 4,以此类推。

二进制的每一位也都有它对应的数值。从右往左,第一位代表 1,第二位代表 2,第三位代表 4,第四位代表 8,第五位代表 16,第六位代表 32,第七位代表 64…… 例如二进制数 101,它就是 1 个 4(第三位)加上 0 个 2(第二位)再加上 1 个 1(第一位),也就是十进制的 5。

7 张卡片猜姓氏的原理

这种猜姓氏的方法核心就基于二进制原理。我们先将127个常见姓氏进行编号,从1开始递增,如下所示:

王=1;张=2;李=3;陈=4;……;尤=124;毕=125;聂=126;丛=127。

然后,我们将7张卡片从右往左排列,每一张卡片代表一个二进制位。第一张卡片代表二进制数的第 1 位(最低位),第二张代表第 2 位,以此类推,第七张代表第 7 位(最高位)。

最后,我们将127个姓氏按二进制编码分布到7张卡片上。以尤姓为例,它的编号是124,将其转化为二进制数,即124=1111100,也就是说,从右往左数,第3位、第4位、第5位、第6位、第7位上都是1,那么,我们就将尤姓分布到第3张、第4张、第5张、第6张、第7张卡片上。

这样的话,每张卡片上都有64个姓氏。为什么是64个姓氏呢,我简单说一下。从右往左数,以第1张卡片为例,这张卡片上罗列的姓氏,其对应的二进制编码第一位(最低位)均为1。在这种情况下,固定第一位为 1,而其余的六位,每一位都存在两种可能,既可以是 0,也可以是 1。依据数学中的排列组合原理,每一位的可能性相乘,即2×2×2×2×2×2 = 2^6,由此便产生了 64 种不同的编号,也就对应着 64 个姓氏。

当参与者指出自己姓氏所在的卡片时,就相当于给出了一组二进制信息。比如,参与者指出了第 1、3、5 张卡片,那么对应的二进制数就是 0010101,将其转换为十进制数,再根据之前的编号规则,就能找到对应的姓氏。

图 1 子由图库-姓氏猜猜乐

实际案例解析

假设我们要猜 “李” 姓,“李” 姓被编号为 3。3 转换为二进制是 11,这就意味着 “李” 姓会出现在第 1、2 张卡片上。当参与者指出这两张卡片时,猜姓氏的人就能通过这些信息,反向得出二进制数 11,进而知道对应的十进制数 3,也就知道了 “李” 姓。

推荐

是不是对这 7 张卡片猜姓氏的原理感到意犹未尽?想不想亲自体验一番这种奇妙的猜姓氏玩法?别犹豫啦!微信小程序【子由图库】不仅把这种超有趣的玩法融入其中,还有精美独特的姓氏头像等你来领取。快来【子由图库】小程序,解锁更多趣味与惊喜!

在JAVA语言中设计一个姓氏游戏可以分为以下几个步骤: 1. **游戏初始化**:创建一个包含随机选择的中国姓氏数组,用户开始时可以选择测。 2. **输入处理**:写函数接收用户的输入,检查是否为有效的姓氏字符,计算剩余测次数。 3. **比较判断**:将用户输入的姓氏与预设的姓氏进行比较,如果匹配则游戏结束显示结果;如果不匹配,则提示用户的是否正确以及是否有其他字符错误。 4. **循环条件控制**:游戏会进入一个循环,在用户未对之前反复进行上述步骤。当测次数耗尽或者正确姓氏时,退出循环。 5. **错误处理**:考虑到用户体验,需要提供一些友好的错误提示,比如提醒用户姓氏的长度、是否只包含汉字等。 6. **游戏结束**:游戏结束后,可以询问玩家是否还想再玩一次,如果是则重新开始,不是则退出程序。 下面是一个简单的伪代码示例: ```java import java.util.*; public class GuessSurname { private String[] surnames; private int guesses; public void startGame() { // 初始化姓氏数组 surnames = getRandomChineseSurnames(); guesses = 5; // 设置初始测次数 while (true) { System.out.println("请输入你姓氏(最多" + guesses + "次机会)"); String input = getUserInput(); if (guess(input)) { System.out.println("恭喜,你对了!"); break; } else { System.out.println("很遗憾,错误。请再试一次。"); guesses--; if (guesses == 0) { System.out.println("游戏结束,正确的姓氏是:" + surnames[0]); break; } } } playAgain(); } // ... 其他辅助函数... public static void main(String[] args) { GuessSurname game = new GuessSurname(); game.startGame(); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值