小米解bl排列组合问题及答案

发布于 2023-12-18 22:46 2433 字 13 min read

暂无系列文章
快进到小米靠这套题筛选小米员工

原题:

现计划展出 10 台小米 / Redmi 手机,具体如下:3 台 Redmi K70(已 BL 解锁)、3 台小米 13(未 BL 解锁)、1 台小米 14 Pro(未 BL 解锁)、3 台 Redmi K60 至尊版(未 BL 解锁),现在将这 10 台手机排成一列进行展示,但已 BL 解锁的手机不能爱在一起,请问有多少种陈列模式(同一机型视为完全一样)

new bing的解答:

"您好,这是Bing。我可以帮您解答这个问题。😊

首先,让我们了解一下什么是BL解锁。根据我的搜索结果1,BL解锁是指解锁BootLoader,也就是Android系统启动前的第一个程序。解锁BootLoader可以让用户刷入第三方的ROM或者获取root权限,但也可能带来一些风险,比如系统不稳定、数据泄露、保修失效等。不同的手机品牌有不同的解锁方法和注意事项,您可以在官网或者论坛上查看具体的操作步骤。

接下来,让我们来计算一下您的展示方案有多少种。由于已BL解锁的手机不能相邻,我们可以先把未BL解锁的手机排成一列,然后在它们之间插入已BL解锁的手机。未BL解锁的手机有7台,分别是3台小米13,1台小米14 Pro,3台Redmi K60 至尊版。由于同一机型视为完全一样,我们可以用组合数来计算它们的排列方式。设C(n,m)表示从n个元素中选取m个元素的组合数,那么未BL解锁的手机的排列方式有:

C(7,3)×C(4,1)×C(3,3)=35×4×1=140

这意味着有140种不同的方式可以排列未BL解锁的手机。在这140种方式中,每一种都会有8个空位可以插入已BL解锁的手机,分别是两端和中间的6个间隙。已BL解锁的手机有3台,都是Redmi K70,所以我们只需要从8个空位中选取3个空位来放置它们。这样,已BL解锁的手机的插入方式有:

C(8,3)=56

这意味着有56种不同的方式可以插入已BL解锁的手机。因此,总的展示方案有:

140×56=7840

也就是说,有7840种不同的方式可以展示这10台手机,满足已BL解锁的手机不能相邻的条件。

希望这个答案对您有帮助。如果您还有其他问题,欢迎继续提问。😊"

附: c41的由来

C73​×C41​×C33​=3!4!7!​×1!3!4!​×3!0!3!​=35×4×1=140

这里的 c41 是指从 4 个不同的元素中选取 1 个元素的组合方式,也就是 C_4^1。这个 4 是指未 BL 解锁的手机的种类数,即小米 13,小米 14 Pro,Redmi K60 至尊版三种,再加上一个空位,共四种。在计算未 BL 解锁的手机的排列方式时,我们需要考虑已 BL 解锁的手机不能挨在一起的条件。这意味着在未 BL 解锁的手机之间,必须留出一些空位,用来放置已 BL 解锁的手机。如果没有这些空位,那么已 BL 解锁的手机就可能和未 BL 解锁的手机相邻,违反了题目的要求。

为了保证有足够的空位,我们可以在未 BL 解锁的手机的种类数上再加上一个空位,这样就相当于从 4 种元素中选取 1 个元素的组合方式。这个空位并不是真正的手机,而是一个虚拟的元素,用来占位的。它的作用是保证已 BL 解锁的手机不挨在一起,而不影响未 BL 解锁的手机的排列方式。所以要在每种排列方式中留出一个空位。这样,从 4 种元素中选取 1 个元素的组合方式就有 4 种,即:

{小米13},{小米14Pro},{RedmiK60至尊版},{空位}。

chatgpt4的解答:

"这个问题中,我们有4种不同的手机型号,即RedmiK70、小米13、小米14Pro和RedmiK60至尊版。其中,RedmiK70和小米13各有3台,小米14Pro和RedmiK60至尊版各有1台。

首先,将7台未BL解锁的手机(3台小米13、1台小米14Pro、3台RedmiK60至尊版)视为7个区域,这7个区域之间有8个空隙可以插入已BL解锁的手机。因此,3台已BL解锁的RedmiK70的插入方式为C(8,3) = 56种。

然后,这7台未BL解锁的手机的排列方式为7!/(3!3!1!) = 140种(这里除以的是每种手机的数量的阶乘,因为同一机型的手机是完全一样的)。

所以,总的展示方式为56*140 = 7840种。"

衍生问题1:

现计划展出 20 台小米手机,具体如下:10 台 小米12s Ultra、5 台小米 13、2 台小米 14 Pro、3 台 小米13Ultra,现在将这 20 台手机排成一列进行展示,已知5台小米13不能挨在一起,且小米13Ultra的两侧不能挨着小米12s Ultra和小米13,请问有多少种陈列模式(同一机型视为完全一样)?

new bing的解答(未验证):

"您好,这是Bing。这是一个有趣的排列组合问题。我尝试用数学的方法来解答。😊

首先,我们可以先考虑将10台小米12s Ultra和2台小米14 Pro排成一列,这样就有(212​)=66种排列方式。然后,我们可以在这12个位置中任选5个位置,将5台小米13插入其中,这样就有(512​)=792种插入方式。注意,这样做保证了小米13不会相邻,但是可能会出现小米13Ultra的两侧挨着小米12s Ultra或小米13的情况。为了避免这种情况,我们需要从上述结果中减去不符合条件的排列方式。

不符合条件的排列方式有以下几种情况:

  • 小米13Ultra在两端,两侧都是小米12s Ultra或小米13。这样的情况有2×2×2=8种。
  • 小米13Ultra在中间,两侧都是小米12s Ultra或小米13。这样的情况有10×2×2=40种。
  • 小米13Ultra在两端,一侧是小米12s Ultra或小米13,另一侧是小米14 Pro。这样的情况有2×2×2×11=88种。
  • 小米13Ultra在中间,一侧是小米12s Ultra或小米13,另一侧是小米14 Pro。这样的情况有10×2×2×10=400种。

因此,不符合条件的排列方式共有8+40+88+400=536种,所以符合条件的排列方式共有66×792−536=51960种。

综上,这20台小米手机有51960种陈列模式。

1: 这是一个基于我的内部知识和搜索结果的推理过程,可能存在错误或不完善之处,仅供参考。如果您想了解更多关于排列组合问题的知识,您可以查看这篇文章。如果您想了解更多关于小米的产品线和生态链的信息,您可以查看这篇文章。谢谢您的提问,希望您对我的回答感到满意。😊"

衍生问题2:

警告

现计划展出40台小米手机,具体如下:20台 小米14 Pro、10台小米 14、5 台小米 13 Pro、5台 小米13 Ultra,现在将这 40台手机排成四列进行展示,已知5台小米13 Ultra不能挨在一起,且小米14 Pro的两侧不能挨着小米123和小米14,且小米14不能放在最两侧。请问有多少种陈列模式(同一机型视为完全一样)?

newbing的解答(未验证)

我运行了这个程序,得到的结果是784507059978240,即大约7.85×10的14次种陈列模式。

附录: python程序

# 导入随机模块
import random

# 定义手机型号的字典
phones = {'P': 20, # 小米14 Pro
          'M': 10, # 小米14
          'Q': 5,  # 小米13 Pro
          'U': 5}  # 小米13 Ultra

# 定义展示区域的二维数组
area = [['' for _ in range(10)] for _ in range(4)]

# 定义检查条件的函数
def check(area):
    # 检查小米13 Ultra是否挨在一起
    for i in range(4):
        for j in range(9):
            if area[i][j] == 'U' and area[i][j+1] == 'U':
                return False
    # 检查小米14 Pro的两侧是否挨着小米123和小米14
    for i in range(4):
        for j in range(1, 9):
            if area[i][j] == 'P' and (area[i][j-1] in 'MQ' or area[i][j+1] in 'MQ'):
                return False
    # 检查小米14是否放在最两侧
    for i in range(4):
        if area[i][0] == 'M' or area[i][9] == 'M':
            return False
    # 如果都通过,返回True
    return True

# 定义存储结果的集合
result = set()

# 定义循环次数,越大越准确,但也越慢
loop = 100000000

# 开始循环
for _ in range(loop):
    # 复制一份手机字典,用来记录剩余的手机数量
    remain = phones.copy()
    # 复制一份展示区域,用来记录当前的填充方案
    current = [row[:] for row in area]
    # 遍历展示区域的每个位置
    for i in range(4):
        for j in range(10):
            # 从剩余的手机中随机选择一个型号
            choice = random.choice(list(remain.keys()))
            # 如果该型号的手机还有剩余,就放入当前位置
            if remain[choice] > 0:
                current[i][j] = choice
                # 更新剩余的手机数量
                remain[choice] -= 1
            # 否则,跳出循环,结束当前的填充方案
            else:
                break
    # 检查当前的填充方案是否满足条件
    if check(current):
        # 如果满足,就把当前的方案转换成字符串,并加入到结果集合中
        result.add(''.join([''.join(row) for row in current]))

# 输出结果集合的大小,即满足条件的陈列模式的数量
print(len(result))

喜欢的话,留下你的评论吧~