二选一问题生成器

把「A 还是 B」这类的二选一题做成两种玩法:从内置 40 条题库里洗牌后不重复抽取一串题目,或者对你自己填的 A 与 B 随机择一。整串结果由随机种子决定,同一种子在任何设备上都复现同一份,复制走即可发给别人。

题库抽题 5 条 / 种子 20261016 → 甜粽 还是 咸粽、猫 还是 狗、辣 还是 不辣、出租车 还是 公交、酸奶 还是 牛奶
默认示例:题库抽题、5 条、种子 20261016。整表先洗牌再取前 5 条,所以这 5 条互不重复;同一种子在任何设备上都会复现这一串。

下方是内置 40 条「A 还是 B」题库全表,默认展开 12 行,点「加载更多」看全。

使用方法

  1. 「模式」选「题库抽题」时,从 40 条内置「A 还是 B」题库里不重复抽取;选「自定义 A/B 二选一」时,你把左右两个选项填进 A 与 B,页面只负责随机挑一个。
  2. 「抽题数量」默认 5,可填 1 到 40 的整数,表示这一轮出几道题;超过 40 会给出提示,因为题库一共只有 40 条。
  3. 「自定义 A」与「自定义 B」只在自定义模式下使用,默认是火锅与烧烤;任一为空都会给出提示,不会拿上一次的选项冒充结果。
  4. 「随机种子」默认 20261016,可填 1 到 2147483646。同一种子必然得到同一串结果,换个数字整串重排。
  5. 在数量、种子或自定义输入框里直接按回车即开始抽取;结果文本框里回车留给换行,请用 Ctrl 或 Command 加回车触发。
  6. 结果区下方是 40 条题库全表,默认展开 12 行,点「加载更多」看全;「复制对照表」复制制表符表格,「导出 CSV」带 UTF-8 字节序标记。

这个二选一问题生成器能解决什么问题

二选一问题就是把两个选项摆在一起、逼出一个选择的题目,也就是常说的 This or That。它在破冰、直播互动、社群投票、短视频选题与采访提纲里都很好用:比起开放式提问,二选一的门槛极低,被问的人几乎不用思考就能给出答案。

本页把这类题拆成两种玩法。一种是抽出题:从 40 条题库里洗牌后取前若干条,一次得到一串互不重复的问题。另一种是择边:给定一组 A 与 B,让种子决定站哪一边。两种玩法的随机语义并不相同,混用会出现「同一题反复出现」或者「说好的随机却总是同一边」这类问题,本页把它们的边界写清楚。

与站内同类工具相比,本页处理的是「问题」本身:是非选择器给的是二值结论,随机分组工具解决的是把人按组分开,随机顺序与点名工具处理的是名单排序。有些资料把这类工具叫作二选一选择器,本页按「出题」的角度称它为二选一问题生成器。把题目表发到群里时,复现能力比一次性随机更重要:同一种子在任何设备上都给出同一串题目。

计算原理与变量说明

本页有两个随机目标,但共用同一个随机源——一个 32 位线性同余发生器,记作 LCG。它从种子出发,每一步执行 s = (Math.imul(s, 1103515245) + 12345) & 0x7fffffff,即把当前值乘以 1103515245、加 12345,再截取低 31 位。1103515245 与 12345 是这类发生器里的一组经典常数,配合 31 位掩码能稳定得到落在 0 到 2147483647 之间的整数序列。

一、抽题要整表洗牌,再取前 N 条。题库抽题不是「每道题各自独立抽一次」,而是把 40 条题库整表做一次 Fisher-Yates 洗牌,再从头部顺序取 N 条。洗牌从下标 40 减 1 开始,每一步用当前随机值算出 j = Math.floor(s / 2147483647 * (i + 1)),把它与下标 i 交换,i 递减到 1 为止。洗过一遍的序列里每个元素只出现一次,所以取出的 N 条天然不重复——这正是「不重复抽题」的关键。

二、择一只看种子的第一次取值。自定义模式不洗牌,它取出种子走第一步后的值 s,判断 s / 2147483647 是否小于 0.5:小于取左边的 A,否则取右边的 B。同一组 A 与 B 在给定种子下的结果完全确定。默认种子 20261016 的第一步得到 865126641,落在半个区间下方,所以取 A(火锅);换成种子 1,第一步得到 1103527590,超过一半,翻到 B(烧烤)。

三、为什么「不重复」必须靠洗牌。若换成逐条独立随机、重复就重抽,在题库只有 40 条却要抽 30 条时,后期几乎每抽一条都撞上已抽过的题,既慢又可能因为重试上限而少给题。整表洗牌把「不重复」变成序列本身的属性,复杂度固定,抽满 40 条也不会退化。这与生日问题正好对照:独立抽样下从 40 条里抽 5 条撞车概率不高,但目标数量一旦接近题库大小,独立抽样会迅速失衡。

四、一次选择没有记忆。单次二选一里,左右两侧的理论概率各是 50%,指的是「每一次」都是 50%,而不是「抽了几次之后会补偿」。连续五次都落在同一侧的概率是 0.5 的五次方,等于 3.125%——它描述的是一整串结果出现的可能性,不是「第五次一定换边」。前面连出四次左边,不会让第五次更偏向右边。

五、种子既是起点,也是复现凭证。随机序列完全由种子决定,不掺入时间、设备或系统随机源。因此同一份题库、同一个数量、同一个种子,在任何浏览器上都得到同一串题目。想要每批都不同就换种子;想让别人看到一样的一串,就把种子连同数量一起发过去。这与浏览器内置的 Math.random() 正好相反:后者每次启动都不同、无法复现,不适合需要公示与复算的场合。

玩法随机对象用到的随机值输出
题库抽题整张 40 条题库的顺序洗牌每一步各取一个值不重复的 N 条题目
自定义择一一组 A 与 B 的左右归属只取序列的第一个值A 或 B 当中的一个

完整示例(数值仅作演示)

示例条件一:题库抽题、数量 5、种子 20261016,把 40 条题库洗牌后取前 5 条,结果依次是:

  1. 甜粽 还是 咸粽
  2. 猫 还是 狗
  3. 辣 还是 不辣
  4. 出租车 还是 公交
  5. 酸奶 还是 牛奶

这 5 条互不重复,来自同一轮洗牌;只要数量与种子不变,任何设备上复算都是这 5 条。示例条件二:自定义 A/B、A 填火锅、B 填烧烤,种子 20261016 时第一步随机值是 865126641,小于 2147483647 的一半,判定取左边,结果为火锅。改成种子 1,第一步变成 1103527590,结果翻到右边变成烧烤;种子 42 的第一步是 1250496027,同样超过一半取右边;种子 2026 的第一步是 191421147,小于一半取左边。可见换种子就能换边,但给定种子一定可复现。以上数值仅作演示。

题库、概率与种子对照表

下表把连续选择里最容易引起误会的概率摆在一起。单次二选一的左右概率各是 50%;连出同一侧的概率随次数快速下降,连续五次都同一侧只有 3.125%,但它说的是整串结果,不是下一次的偏置。

观察对象概率含义
单次取左50%每一步都是独立的一半
单次取右50%与取左完全对称
连续 5 次同侧3.125%0.5 的五次方,指一整串结果

下表给出四个种子在自定义择一下的第一步取值与结果边,用来验证「同一种子必然可复现」。

种子第一步取值结果边
20261016865126641左
11103527590右
421250496027右
2026191421147左

两张表合起来看:洗牌决定「出哪几道题」,第一步取值决定「站哪一边」,两者随机值同源却用处不同。题库抽题即使数量取到 40,也只是把洗好的 40 条依次取出,不会重复。

结果边界、舍入与适用说明

常见问题

题库抽题为什么不会重复?

因为它不是逐条独立抽,而是把 40 条题库整表洗牌后从头部顺序取。洗过一遍的序列里每个元素只出现一次,取出的若干条天然不重复;独立抽样接近 40 条时会频繁撞车。

自定义模式下换种子为什么就换边了?

自定义择一只看种子走第一步后的取值是否小于半个区间。20261016 的第一步是 865126641,取左;换成 1 后第一步变成 1103527590,取右。换种子等于换起点,边跟着变,但给定种子一定复现。

连续抽出 5 次同一侧,是不是随机坏了?

不是。单次二选一左右各 50%,连续五次同侧的概率是 0.5 的五次方,等于 3.125%。这个数说的是一整串结果出现的可能性,不是下一次的概率;每一次都是新的 50%。

为什么同一个种子每次结果都一样?

因为随机序列完全由种子经线性同余发生器推出,没有引入时间或系统随机源。同一种子必然走出同一条序列,起点相同结果就相同;想每批都换,把种子改成别的数字即可。

抽题数量和题库容量是什么关系?

题库固定 40 条。数量可在 1 到 40 之间取,取满 40 就是整张题库的洗牌顺序;超过 40 无法提供,因为没有新题可出。数量越大一轮出的题越多,但都不会重复。

抽到的题目能不能直接拿去做活动?

可以。抽取结果是一串纯文本,复制进文档、聊天框或投票工具即可。想每场不同就换种子,想两场用同一套题就把种子和数量一起记下来。

这个工具免费吗?

免费,无需注册即可使用。

输入的数据安全吗?

安全。计算在当前浏览器本地完成,不会上传输入内容。

相关工具