【程序5】填运算符

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

运行结果:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值