华为ICT仓颉语言小游戏——心灵感应魔法
朋友们,这次来分享一个简单的小游戏:猜数字——心灵感应魔法
和街头魔术很像:让你心中像一个数字,拿出几张卡片,挨个问你你的数字是否在卡片上,最后猜出你心中的数字。
这个 “心灵感应猜数字” 游戏的本质原理,是 把 “十进制数字” 拆解成 “二进制位的组合”,用 “是否在卡片上” 的回答对应二进制的 “1/0”,最终通过二进制位的叠加还原出目标数字。
简单说,就是用二进制的 “位编码逻辑”,把 “猜数字” 变成了 “收集每一位二进制的状态”—— 具体拆成 3 个核心步骤就能看透本质:
1. 本质第一步:给每个二进制位 “分配一张卡片”
我们日常用的十进制数字(比如 1-31),都能转成二进制(比如 13=1101,5 位二进制能覆盖 1-31)。游戏里的每张卡,本质是 “某一个二进制位的‘1’的专属卡片”:
- 卡 1 → 对应二进制 “第 1 位”(权重 1,即 2⁰):只写所有 “第 1 位是 1” 的数(1、3、5…);
- 卡 2 → 对应二进制 “第 2 位”(权重 2,即 2¹):只写所有 “第 2 位是 1” 的数(2、3、6…);
- 卡 3 → 对应二进制 “第 3 位”(权重 4,即 2²):只写所有 “第 3 位是 1” 的数(4、5、6…);
- 以此类推,有多少位二进制,就需要多少张卡。
每张卡的 “基准数”(1、2、4、8…),其实就是这张卡对应二进制位的 “权重值”。
2. 本质第二步:用 “是否在卡片上” 对应二进制的 “1/0”
当程序问 “你的数字在这张卡上吗”,本质是在问:“你想的数字,它的某一位二进制是 1(在卡上)还是 0(不在卡上)?”
- 回答 “是” → 这一位二进制是 1 → 要加上这张卡的 “权重值”;
- 回答 “否” → 这一位二进制是 0 → 不加这个权重值。
比如你想的是 13(二进制 1101):
- 卡 1(权重 1,第 1 位):13 的第 1 位是 1 → 是 → 加 1;
- 卡 2(权重 2,第 2 位):13 的第 2 位是 0 → 否 → 不加;
- 卡 3(权重 4,第 3 位):13 的第 3 位是 1 → 是 → 加 4;
- 卡 4(权重 8,第 4 位):13 的第 4 位是 1 → 是 → 加 8;
- 卡 5(权重 16,第 5 位):13 的第 5 位是 0 → 否 → 不加。
3. 本质第三步:权重相加 = 还原十进制数字
二进制转十进制的核心规则,就是 “每一位的数字 × 对应权重,再求和”。游戏里把 “是” 对应的权重加起来,本质就是在做 “二进制转十进制” 的计算—— 比如 1+4+8=13,正好是你想的十进制数字。
这一步没有任何 “魔法”,只是用 “卡片提问” 的形式,悄悄收集了二进制的每一位状态,最后按规则算出结果。
一句话戳穿本质
这个游戏看似 “心灵感应”,其实是 用 “卡片” 当工具,把 “猜数字” 变成了 “让你主动告诉程序目标数字的二进制每一位是 1 还是 0”,最后通过二进制转十进制的计算,把结果 “变” 出来—— 本质是二进制编码的巧妙应用,和 “魔法” 无关,全是数学逻辑~
接下来是用仓颉语言来实现整个小游戏:
1、给定范围:6张卡片,那么范围在2的6次方-1
2.记录二进制数字,并且把它转换为十进制数字:

更多推荐



所有评论(0)