枚举(穷举)法
枚举法的本质就是从所有候选答案中去搜索正确的解,使用该算法需要满足两个条件:
(1):可预先确定候选答案的数量;
(2):候选答案的范围在求解之前必须有一个确定的集合.
实例1:填数游戏.
Java代码描述:
public static void main(String[] args) {
int multi = 1;
int result = 0;
int i1, i2, i3, i4, i5;
for (i1 = 1; i1 <= 9; i1++) {
for (i2 = 0; i2 <= 9; i2++) {
for (i3 = 0; i3 <= 9; i3++) {
for (i4 = 0; i4 <= 9; i4++) {
for (i5 = 0; i5 <= 9; i5++) {
multi = i1 * 10000 + i2 * 1000 + i3 * 100 + i4 * 10 + i5;
result = i5 * 100000 + i5 * 10000 + i5 * 1000 + i5 * 100 + i5 * 10 + i5;
if (multi * i1 == result) {
System.out.println(i1 + " " + i2 + " " + i3 + " " + i4 + " " + i5);
System.out.println(" " + i1);
System.out.println("-----------------");
System.out.println(i5 + " " + i5 + " " + i5 + " " + i5 + " " + i5);
break;
}
}
}
}
}
}
}
运行结果:
实例2:填运算符:
Java代码描述:
private static void tysf() {
int[] i = new int[5];// 数组i用来表示4个运算符
int j; // 循环变量
int sign; // 累加运算时的符号
int result = 0; // 保存运算式的结果值
int count = 0; // 计数器,统计符合条件的方案
int[] num = new int[6]; // 保存操作数
float left, right; // 保存中间结果
char[] oper = { ' ', '+', '-', '*', '/' }; // 运算符
System.out.println("请输入五个数");
Scanner sc = new Scanner(System.in);
for (int ii = 1; ii < num.length; ii++) {
num[ii] = sc.nextInt();
}
System.out.println("请输入结果");
result = sc.nextInt();
// for (i[0] = 1; i[0] < 4; i[0]++) { //循环4中填运算符,1表示+,2表示-,3表示*,4表示/
// if ((i[0] < 4) || (num[1] != 0)) { //运算符如果是/,则第二个运算数不能为0
for (i[1] = 1; i[1] <= 4; i[1]++) {
if ((i[1] < 4) || (num[2] != 0)) {
for (i[2] = 1; i[2] <= 4; i[2]++) {
if ((i[2] < 4) || (num[3] != 0)) {
for (i[3] = 1; i[3] <= 4; i[3]++) {
if ((i[3] < 4) || (num[4] != 0)) {
for (i[4] = 1; i[4] <= 4; i[4]++) {
if ((i[4] < 4) || (num[5] != 0)) {
left = 0;
right = num[1];
sign = 1;
for (j = 1; j <= 4; j++) {
switch (oper[i[j]]) {
case '+':
left = left + sign * right;
sign = 1;
right = num[j + 1];
break;
case '-':
left = left + sign * right;
sign = -1; // 通过sign=-1实现减法
right = num[j + 1];
break;
case '*':
right = right * num[j + 1]; // 实现乘法
break;
case '/':
right = right / num[j + 1]; // 实现除法
break;
}
}
if (left + sign * right == result) {
count++;
System.out.print(count + " ");
for (j = 1; j <= 4; j++) {
System.out.print(num[j] + "" + oper[i[j]]);
}
System.out.println("=" + result);
}
}
}
}
}
}
}
}
}
if (count == 0) {
System.out.println("没有符合条件的 ");
}
}
运行结果: