You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

《Java编程入门》中生日猜测算法原理及集合构造解析

生日猜测算法的底层原理与集合构造解析

一、算法实现逻辑

这个算法的核心是二进制编码原理。1-31之间的任意数字,都可以用5位二进制数表示(比如5是00101,23是10111)。

每个集合的首个数字都是2的幂次:set1首数字1=2⁰,set2首数字2=2¹,set3首数字4=2²,set4首数字8=2³,set5首数字16=2⁴。这些数字恰好对应5位二进制数每一位的权重值。

当用户确认生日在某个集合中时,就代表生日的二进制数在对应位置上是1。把所有符合条件的集合首数字相加,本质就是将这些1对应的权重值累加,结果自然就是生日的十进制数值。

举个实际例子:如果生日是23,它的二进制是10111,对应:

  • 第0位(权重1)为1 → 生日在set1里
  • 第1位(权重2)为1 → 生日在set2里
  • 第2位(权重4)为1 → 生日在set3里
  • 第4位(权重16)为1 → 生日在set5里
    将这些集合的首数字相加:1+2+4+16=23,完全匹配生日。

二、集合构造规则

每个集合的构造都对应二进制的某一位,规则非常明确:

  • 给每个集合分配一个二进制位(set1对应第0位,set2对应第1位,直到set5对应第4位)
  • 筛选1-31中,二进制该位为1的所有数字,放入这个集合
  • 集合的首个数字就是该位对应的权重值(2的幂次)

以set4为例,它对应第3位(权重8=2³),所有二进制第3位为1的数字包括8、9、10、11、12、13、14、15、24、25、26、27、28、29、30、31,这和示例里的set4内容完全一致。

所有集合都按这个规则筛选数字,确保只要用户准确确认生日所在的集合,相加首数字就能得到正确结果。

内容的提问来源于stack exchange,提问作者Nader Abd Alhamed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 13:34:38