源本科技 | 码上会

无重复数字的三位数排列

2026/01/26
13
0

题目

有 1、2、3、4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

说明

本题要求从数字集合 {1, 2, 3, 4} 中选取三个不同的数字,组成所有可能的三位数,且每个三位数中的三个数字互不相同(即不允许重复使用同一数字)。这是一个典型的排列问题。从 4 个不同元素中取出 3 个进行排列,其数学解为排列数:

P(4,3)=A43=4×3×2=24 P(4,3) = A_4^3 = 4 \times 3 \times 2 = 24

程序通过三重嵌套循环遍历所有可能的百位(i)、十位(j)、个位(k)组合(共4×4×4=644 \times 4 \times 4 = 64 种),然后通过条件 i != j && j != k && i != k 过滤出三个位置数字互不相同的组合,从而得到合法的三位数。

运行示例

123
124
132
134
142
143
213
214
231
234
241
243
312
314
321
324
341
342
412
413
421
423
431
432
共24个三位数

👈点击左箭头查看答案(一定要在自己思考并实现后再看参考答案哦!)

规律分析

  • 可选数字:{1, 2, 3, 4},共 4 个不同数字。

  • 位数要求:三位数,且每位数字不能重复。

  • 排列逻辑

    • 百位:4 种选择(1~4)

    • 十位:剩下 3 个数字可选

    • 个位:剩下 2 个数字可选
      因此总数为4×3×2=244 \times 3 \times 2 = 24

该问题本质上是求从 4 个元素中取 3 个的全排列,属于组合数学中的基本排列模型。

也可以用公式表示为:数量=P(n,r)=n!(nr)!=4!(43)!=241=24 \text{数量} = P(n, r) = \frac{n!}{(n - r)!} = \frac{4!}{(4 - 3)!} = \frac{24}{1} = 24

程序实现

public class Demo11 {
    public static void main(String[] args) {
        int count = 0;
        for (int i = 1; i <= 4; i++)          // 百位
            for (int j = 1; j <= 4; j++)      // 十位
                for (int k = 1; k <= 4; k++)  // 个位
                    if (i != j && j != k && i != k) {
                        count += 1;
                        System.out.println(i * 100 + j * 10 + k);
                    }
        System.out.println("共" + count + "个三位数");
    }
}

补充说明

  • 若允许重复数字,则总数为43=644^3 = 64 个三位数。

  • 若数字集合变为 {0, 1, 2, 3},则需额外排除百位为 0 的情况(因为三位数不能以 0 开头),此时需调整逻辑。

  • 此类问题广泛应用于密码学、排列组合教学、算法入门等领域,是理解“排列 vs 组合”、“有放回 vs 无放回抽样”的经典案例。