首页 > 代码库 > 第三届蓝桥杯javaC组_趣味算式

第三届蓝桥杯javaC组_趣味算式

/* (程序头部注释开始)

* 程序的版权和版本声明部分

* Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 

* All rights reserved.

* 文件名称: 蓝桥杯赛题                           

* 作    者:   彭俊豪               

* 完成日期:   2016   年 04月 01日

* 版 本 号:      001   

* 对任务及求解方法的描述部分

* 问题描述:

* 输入描述: 

匪警请拨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
......

已知的两个答案可以输出,但不计分。

各个答案的前后顺序不重要。

注意:

请仔细调试!您的程序只有能运行出正确结果的时候才有机会得分!

* 程序头部的注释结束

*/

上代码:

public class Main {
  public static void main(String[] args) {
    f(1, "1");
   }

  public static void f(int t,String str){
    if(t==9){
      if( z(str)){
        System.out.println(str);
      }
    return;
    }
    for (int i = 0; i <3; i++) {
      if(i==0){
        f(t+1, str+String.valueOf(t+1));
      }else if(i==1){
        f(t+1, str+"+"+String.valueOf(t+1));
      }else if(i==2){
        f(t+1, str+"-"+String.valueOf(t+1));
      }
    }
  }

  public static boolean z(String s){
    int aim=0;
    String[] arr=s.split("\\+");
    for (String string : arr) {
      String[] arr_2=string.split("\\-");
      int t=Integer.valueOf(arr_2[0]);
      for (int i = 1; i < arr_2.length; i++) {
        t-=Integer.valueOf(arr_2[i]);
      }
      aim+=t;
    }
    if(aim==110){
    return true;
    }else{
    return false;
    }
  }
}

第三届蓝桥杯javaC组_趣味算式