匪警请拨110,即使手机欠费也可拨通!
为了保障社会秩序,保护人民群众生命财产安全,警察叔叔需要与罪犯斗智斗勇,因而需要经常性地进行体力训练和智力训练!
某批警察叔叔正在进行智力训练:
1 2 3 4 5 6 7 8 9 = 110;
请看上边的算式,为了使等式成立,需要在数字间填入加号或者减号(可以不填,但不能填入其它符号)。之间没有填入符号的数字组合成一个数,例如:12+34+56+7-8+9 就是一种合格的填法;123+4+5+67-89 是另一个可能的答案。
请你利用计算机的优势,帮助警察叔叔快速找到所有答案。
每个答案占一行。形如:
12+34+56+7-8+9
123+4+5+67-89
......
已知的两个答案可以输出,但不计分。
各个答案的前后顺序不重要。
注意:
请仔细调试!您的程序只有能运行出正确结果的时候才有机会得分!
请把所有类写在同一个文件中,调试好后,存入与【考生文件夹】下对应题号的“解答.txt”中即可。
相关的工程文件不要拷入。
请不要使用package语句。
源程序中只能出现JDK1.5中允许的语法或调用。不能使用1.6或更高版本。
import java.util.ArrayList;
public class Maths {
/**
* 计算表达式的值
* @param s
* @return
*/
public static int MathExpression(String s){
ArrayList<Character> oper = new ArrayList<Character>();
ArrayList<Integer> num = new ArrayList<Integer>();
if(!(s.contains("+") || s.contains("-"))) {
return Integer.parseInt(s);
} else {
int start = 0;
int end = 0;
for(int i=0; i<s.length(); i++){
if(s.charAt(i) == '+' || s.charAt(i) == '-') {
String s1 = s.substring(start, i);
//System.out.println(s1);
start = i+1;
num.add(new Integer(s1));
oper.add(s.charAt(i));
} else if (s.length()-1 == i) {
String s1 = s.substring(start, s.length());
//System.out.println(s1);
num.add(new Integer(s1));
}
}
int sum = num.get(0);
int index = 1;
for(int j=0; j<oper.size(); j++){
switch(oper.get(j)) {
case '+' :
sum += num.get(index++);
// System.out.println(sum);
break;
case '-' :
sum -= num.get(index++);
// System.out.println(sum);
break;
}
}
return sum;
}
}
/**
* 遍历所有出所有的可能,并输出
*
*/
public static void print(){
String[] arr = new String[17];
arr[0] = "1";
arr[2] = "2";
arr[4] = "3";
arr[6] = "4";
arr[8] = "5";
arr[10] = "6";
arr[12] = "7";
arr[14] = "8";
arr[16] = "9";
for(int i=0; i<Math.pow(3, 8); i++){
StringBuffer sb = new StringBuffer();
int p=i;
int tmp=p%3;
for(int j=0;j<8;j++)
{
switch (tmp)
{
case 0:
arr[2*j+1] = "";
break;
case 1:
arr[2*j+1] = "+";
break;
case 2:
arr[2*j+1] = "-";
break;
default:
break;
}
p=p/3;
tmp=p%3;
}
for(int k=0; k<arr.length; k++){
sb.append(arr[k]);
}
if(MathExpression(sb.toString()) == 110) {
System.out.println(sb.toString());
}
// System.out.println(sb.toString());
}
}
public static void main(String[] args) {
Maths.print();
}
//输出
// 12-3+4-5+6+7+89
// 123+4+5+67-89
// 1+234-56-78+9
// 1+2+34+5+67-8+9
// 12+34+56+7-8+9
// 123+4-5-6-7-8+9
// 1-2+3+45-6+78-9
// 123-4+5-6-7+8-9
// 12+3+45+67-8-9
// 123-4-5+6+7-8-9
}