2012第三届国信蓝点杯全国软件设计大赛编程大题

来源:互联网 发布:php转换时间戳函数 编辑:程序博客网 时间:2024/05/06 14:16

 * 题目
 *  为了保障社会秩序,保护人民群众生命财产安全,警察叔叔需要
 *  与罪犯斗智斗勇,因而需要经常性地进行体力训练和智力训练!
 *  某批警察叔叔正在进行智力训练:
 *  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
 *  ......
 *  已知的两个答案可以输出,但不计分。各个答案的前后顺序不重要。

 

public class FunEquation {public static void play(int n, String tempStr, String operator[]) {if (n == 9) {if (JudeSum(tempStr + n) == 110)System.out.println(tempStr + n);return;}for (int i = 0;i<operator.length; i++) {int len =((n + operator[i]).length());tempStr+= n + operator[i];play(n + 1, tempStr, operator);tempStr=tempStr.substring(0, tempStr.length()-len);}}public static int JudeSum(String str) {//解析字符串并求和String newStr[] = str.split("\\+");int addSum =0;for (int j =0;j<newStr.length;j++) {int temp =0;if (newStr[j].contains("-")){String subStr[] = newStr[j].split("\\-");temp = Integer.parseInt(subStr[0]);for (int k = 1; k < subStr.length; k++) temp-=Integer.parseInt(subStr[k]);} else  addSum += Integer.parseInt(newStr[j]);addSum += temp;}return addSum;}public static void main(String[] args) {String operator[] = { "", "+", "-" };play(1, "", operator);}}