匪警请拨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
......
package two_digui;
/*
* 1 2 3 4 5 6 7 8 9 = 110
* 请看上边的算式,为了使等式成立,需要在数字间填入加号或者减号(可以不填,但不能填入其它符号)。
* 之间没有填入符号的数字组合成一个数,例如:12+34+56+7-8+9 就是一种合格的填法;
* 123+4+5+67-89 是另一个可能的答案。
*/
public class suanshi {
/**
*
* @param a 数组
* @param k 正在考虑的下标
* @param s 要输出的结果串
* @param res 最后的结果
*/
static void fun1(int []a,int k,String s,int res){
if(k==0){
if(a[0]==res){
System.out.println(a[0]+s);
}
return;
}
fun1(a,k-1,"+"+a[k]+s,res-a[k]);
fun1(a,k-1,"-"+a[k]+s,res+a[k]);
int old=a[k-1];
a[k-1]=Integer.parseInt(""+a[k-1]+a[k]);
fun1(a,k-1,s,res);
a[k-1]=old;//回溯
}
public static void main(String[] args) {
int a[]={1,2,3,4,5,6,7,8,9};
fun1(a,8," ",110);
}
}