【程序11】
题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
思路:全排列,n个数字,能组成Anm 个互不相同且无重复数字的m位数。
即:
扩展:
排列的定义:从n个不同元素中,任取m(m≤n,m与n均为自然数,下同)个元素按照一定的顺序排成一列,叫做从n个不同元素中取出m个元素的一个排列;从n个不同元素中取出m(m≤n)个元素的所有排列的个数,叫做从n个不同元素中取出m个元素的排列数,用符号 A(n,m)表示。
计算公式:
组合的定义:从n个不同元素中,任取m(m≤n)个元素并成一组,叫做从n个不同元素中取出m个元素的一个组合;从n个不同元素中取出m(m≤n)个元素的所有组合的个数,叫做从n个不同元素中取出m个元素的组合数。用符号 C(n,m) 表示。
计算公式:
;C(n,m)=C(n,n-m)。(n≥m)
其他排列与组合公式 从n个元素中取出m个元素的循环排列数=A(n,m)/m!=n!/m!(n-m)!. n个元素被分成k类,每类的个数分别是n1,n2,...nk这n个元素的全排列数为 n!/(n1!×n2!×...×nk!). k类元素,每类的个数无限,从中取出m个元素的组合数为C(m+k-1,m)。
解答代码:
package wn.comeOn.java.test.arithmetic50;
import java.util.ArrayList;
public class Arrangement {
// 阶乘
public static int factorial(int n) {
if (n == 0 || n == 1) {
return 1;
}
for (int i = 0; i < n; i++) {
return n * factorial(--n);
}
return 0;
}
// 排列:
public static int arrangement01(int n, int m) {
return factorial(n) / factorial(n - m);
}
// 组合:
public static int arrangement02(int n, int m) {
return factorial(n) / (factorial(m) * factorial(n - m));
}
// 有1、2、3、4个数字,全排列,三位数,都是多少?
public static void arrange01() {
int i = 0; // 保存百位上的数
int j = 0; // 保存十位上的数
int k = 0; // 保存各位上的数
int count = 0;
for (i = 1; i <= 4; i++) {
for (j = 1; j <= 4; j++) {
for (k = 1; k <= 4; k++) {
if (i != j && j != k && i != k) {
System.out.println(++count + ":" + (i * 100 + j * 10 + k));
}
}
}
}
}
// 有1、2、3、4个数字,组合,都是多少?
public static void arrange02() {
int i = 0; // 保存百位上的数
int j = 0; // 保存十位上的数
int k = 0; // 保存各位上的数
int count = 0;
ArrayList<Integer> arr = new ArrayList<>();
for (i = 1; i <= 2; i++) {
for (j = 2; j <= 3; j++) {
for (k = 3; k <= 4; k++) {
if (i != j && j != k && i != k) {
int tmp = i * 100 + j * 10 + k;
arr.add(tmp);
System.out.println(++count + ":" + tmp);
}
}
}
}
}
public static void main(String[] args) {
// System.out.println("4的阶乘为:" + factorial(4));
System.out.println("4个数字,能组成" + arrangement01(4, 3) + "个互不相同且无重复数字的3位数");
System.out.println("排列:" + arrangement01(4, 3));
arrange01();
System.out.println();
System.out.println("组合:" + arrangement02(4, 3));
arrange02();
}
}
输出结果:
4个数字,能组成24个互不相同且无重复数字的3位数
排列:24
1:123
2:124
3:132
4:134
5:142
6:143
7:213
8:214
9:231
10:234
11:241
12:243
13:312
14:314
15:321
16:324
17:341
18:342
19:412
20:413
21:421
22:423
23:431
24:432
组合:4
1:123
2:124
3:134
4:234