- /*【程序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("没有符合要求的方法!");
- }
- }
- }
运行结果: