匪警请拨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或更高版本。
这道题只是考寻路问题而已。我改了一下。把路径也可以打印出来了。
/**
* 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
* @author liaoxiansheng 2012 05 07
*
*/
public class find {
public static void main(String[] args) {
find110("",1);
}
public static void find110(String str ,int start)
{
String temp=str;
if(str.indexOf("9")!=-1)
{//运算
if(jisuan(str)==110) System.out.println(str+"=110");
return;
}
for (int i =start; i <=9; i++) {
temp+=""+i;
find110(temp,++start);
temp=str;
start=i;
temp+="+"+i;
find110(temp,++start);
temp=str;
start=i;
temp+="-"+i;
find110(temp,++start);
temp=str;
start=i;
break;
}
}
public static int jisuan(String str)
{
String [] ss=str.split("[^0-9]");
if(ss[0].equals("")) return 0;
int num1=Integer.parseInt(ss[0]);
int sum=num1;
for (int i =1; i<ss.length; i++) {
char op=str.charAt(ss[i-1].length());
str=str.substring(ss[i-1].length()+1);
int num2=Integer.parseInt(ss[i]);
if(op=='+') sum+=num2;
if(op=='-') sum-=num2;
}
return sum;
}
}