第三届蓝桥杯预赛真题-Java高职组-10题
匪警请拨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+9123+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;}}
?