警察110

package com;

// 题目:给定:123456789 在数字之间加+ 或者 - 或者不运算 ,使其最后的结果为:110  ,求所有的组合的情况;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class test {

	public static void main(String[] args){

		String s="123456789";
		f(s,1);
	}
	
	// 计算每次的值; 使用JavaScript 对表达式直接进行运算
	public static void show(String s){
		ScriptEngine jse = new ScriptEngineManager().getEngineByName("JavaScript");
        double res = 0;
		try {
			res = (Double)jse.eval(s);
		} catch (ScriptException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		if(res==110){
			System.out.println(s+" ="+110);
		}
	}
	
	//思路:
	// 1、第一个数字加+ 或者加 - 或者不加 ,三种情况进行运算 
	// 2、当到了最后的一个数值的时候就进行计算结果并进行比较
	public static void f(String s,int n){
		if(n==9){
			show(s);
			return;
		}else{
			f(s.replace(n+"", n+"+"),n+1);
			f(s.replace(n+"", n+"-"),n+1);
			f(s,n+1);
		}
	}
	
//	static void f1(String s){
//		String[] str1=s.split("\\+");
//		int sum=0;
//		for(int i=0;i<str1.length;i++){
//			String[] str2=str1[i].split("\\-");
//			int n=Integer.parseInt(str2[0]);
//			for(int j=1;j<str2.length;j++){
//				n-=Integer.parseInt(str2[j]);
//			}
//			sum+=n;
//		}
//		if(sum==110){
//			System.out.println(s+" ="+110);
//		}
//		
//	}
	
}

你可能感兴趣的:(组合)