DeepSeek做组合数学题:求只由数字1、2、3组成且同时包含数字1、2、3的5位数有多少个?

AI赋能编程语言挑战赛 10w+人浏览 283人参与

1. 题意理解

题目要求:

  1. 是一个 5 位数(万位不能是 0)。
  2. 只由数字 1、2、3 组成,不能出现其他数字(0、4、5…等都不允许)。
  3. 必须同时包含数字 1、2、3(即:不能只用两个数字或一个数字)。

5 位数的每一位从 {1, 2, 3} 中选取,但是“必须同时包含 1、2、3”意味着三个数字都要出现至少一次。


2. 不考虑“必须包含 1,2,3”时

如果只由 {1,2,3} 组成的 5 位数:
万位可以从 {1,2,3} 中选(3 种选择),其它四位也是各 3 种选择。
总数=35=243\text{总数} = 3^5 = 243总数=35=243


3. 用容斥原理去掉缺少某个数字的情况


B1B_1B1:不含数字 1(只由 {2,3} 组成)
B2B_2B2:不含数字 2(只由 {1,3} 组成)
B3B_3B3:不含数字 3(只由 {1,2} 组成)


计算 ∣B1∣|B_1|B1
只由 {2,3} 组成 5 位数,万位可以是 2 或 3(2 种),其它位也是各 2 种选择。
∣B1∣=25=32|B_1| = 2^5 = 32B1=25=32

同理 ∣B2∣=32|B_2| = 32B2=32∣B3∣=32|B_3| = 32B3=32


计算 ∣B1∩B2∣|B_1 \cap B_2|B1B2
不含 1 且不含 2 → 只能由 {3} 组成。
万位只能是 3,其它位也只能是 3。只有 1 种情况:33333。
∣B1∩B2∣=1|B_1 \cap B_2| = 1B1B2=1

同理 ∣B1∩B3∣=1|B_1 \cap B_3| = 1B1B3=1(只能由 {2} 组成:22222)
∣B2∩B3∣=1|B_2 \cap B_3| = 1B2B3=1(只能由 {1} 组成:11111)


计算 ∣B1∩B2∩B3∣|B_1 \cap B_2 \cap B_3|B1B2B3
不含 1、2、3 → 没有可用数字,所以为 0。


4. 容斥原理求至少缺少 1,2,3 之一的个数

∣B1∪B2∪B3∣=32+32+32−(1+1+1)+0|B_1 \cup B_2 \cup B_3| = 32 + 32 + 32 - (1+1+1) + 0B1B2B3=32+32+32(1+1+1)+0

=96−3=93= 96 - 3 = 93=963=93


5. 求“三个数字都至少出现一次”的个数

答案=35−∣B1∪B2∪B3∣\text{答案} = 3^5 - |B_1 \cup B_2 \cup B_3|答案=35B1B2B3
=243−93=150= 243 - 93 = 150=24393=150


最终答案为:
150\boxed{150}150


验证:
也可以用直接分类(用 1,2,3 的数目分别为 ((3,1,1)) 型及其排列),以及 ((2,2,1)) 型分别计算,加起来应为 150。

c++14 # P14745 [ICPC 2021 Seoul R] Trio ## 题目描述 设 $A$ 为任意一个由 $n$ 个自然数组成的集合,其中每个数的十进制表示恰好由四位数组成任何数位上都不包含数字 $0$。 一个 **三元组** 是指从 $A$ 中选出的三个数组成的集合 $\{a, b, c\}$,它同时满足以下条件: - 三个数 $a, b, c$ 的**个位**数字要么全部相同,要么全部不同。 - 三个数 $a, b, c$ 的**十位**数字要么全部相同,要么全部不同。 - 三个数 $a, b, c$ 的**百位**数字要么全部相同,要么全部不同。 - 三个数 $a, b, c$ 的**千位**数字要么全部相同,要么全部不同。 例如,如果这三个数都是 $A$ 的成员,那么集合 $\{1425, 1113, 1354\}$ 是一个三元组,因为这三个数的个位数字全部不同,它们的十位数字全部不同,它们的百位数字全部不同,并它们的千位数字全部相同。然而,即使 $A$ 包含这三个数,集合 $\{1425, 1113, 5436\}$ 也不是一个三元组。 给定一个集合 $A$ 作为输入,请编写一个程序,计算并输出不同三元组的数量。 ## 输入格式 你的程序需要从标准输入读取数据。输入的第一行包含一个整数 $n$ ($1 \leq n \leq 2,000$),表示集合 $A$ 中元素的数量。接下来的 $n$ 行,每行包含一个十进制表示的正整数,该数恰好由四位数组成任何数位上都不包含数字 $0$。这 $n$ 个数被认为是互不相同的,并是输入集合 $A$ 的成员。 ## 输出格式 你的程序需要向标准输出写入结果。输出恰好一行。该行应包含一个整数,表示对于输入集合 $A$ 的不同三元组的数量。 ## 输入输出样例 #1 ### 输入 #1 ``` 6 1234 1235 1244 1233 7133 8133 ``` ### 输出 #1 ``` 1 ``` ## 输入输出样例 #2 ### 输入 #2 ``` 9 1234 5678 9123 4567 8912 3456 7891 2345 6789 ``` ### 输出 #2 ``` 84 ``` ## 说明/提示 翻译由 DeepSeek V3 完成
12-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值