/*【程序5】
* 作者 中国风
* 在下面的算式中添加上“+、-、*、/”运算符,使等式成立(不使用括号);
* 5 5 5 5 5 = 5
* 1.4 枚举(穷举)算法
* 1.4.3 实例:填运算符
*
由于算术表达式的特殊性,在编程求解这个算式时,需要注意以下几点:
当填入除号时,要求右侧的数不能为0。
乘除的运算级别比加减高。
5 + 5 - 5 * 5 / 5 = 5
*/
import java.util.Scanner;
public class T005 {
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.print("输入5个数:");
int num[] = new int[5];
for(int i=0;i<5;i++){
num[i] = scan.nextInt();
}
System.out.print("输入结果:");
int result = scan.nextInt();
char[] oper = {'+','-','*','/'};
int count=0; // 计数
int i[] = new int[4]; // 循环用 i[0] i[1] i[2] i[3]
for(i[0]=0;i[0]<4;i[0]++){ // (i=0,1,2,3) 0='+', 1='-', 2='*', 3='/'
if(i[0]<3||num[1]!=0){
for(i[1]=0;i[1]<4;i[1]++){
if(i[1]<3||num[2]!=0){
for(i[2]=0;i[2]<4;i[2]++){
if(i[2]<3||num[3]!=0){
for(i[3]=0;i[3]<4;i[3]++){
if(i[3]<3||num[4]!=0){
float left = 0;
float right = num[0];
int sign = 1; // 正负号
for(int j=0;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;
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(int j=0;j<4;j++){
System.out.print(num[j]+""+oper[i[j]]+"");
}
System.out.println(num[4]+"="+result);
}
}
}
}
}
}
}
}
}
if(count==0){
System.out.println("没有符合要求的方法!");
}
}
}
运行结果: