有 1、2、3、4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
本题要求从数字集合 {1, 2, 3, 4} 中选取三个不同的数字,组成所有可能的三位数,且每个三位数中的三个数字互不相同(即不允许重复使用同一数字)。这是一个典型的排列问题。从 4 个不同元素中取出 3 个进行排列,其数学解为排列数:
程序通过三重嵌套循环遍历所有可能的百位(i)、十位(j)、个位(k)组合(共 种),然后通过条件 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 个的全排列,属于组合数学中的基本排列模型。
也可以用公式表示为:
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 + "个三位数");
}
}若允许重复数字,则总数为 个三位数。
若数字集合变为 {0, 1, 2, 3},则需额外排除百位为 0 的情况(因为三位数不能以 0 开头),此时需调整逻辑。
此类问题广泛应用于密码学、排列组合教学、算法入门等领域,是理解“排列 vs 组合”、“有放回 vs 无放回抽样”的经典案例。