算法笔记_226:填符号凑算式(Java)
目录
1 问题描述
2 解决方案
1 问题描述
匪警请拨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或更高版本。
2 解决方案
1 import java.util.Stack; 2 3 public class Main { 4 public static char[] operation = {' ', '+', '-' }; 5 6 public void check(char[] A) { 7 StringBuffer s = new StringBuffer(""); 8 for(int i = 1;i <= 8;i++) { 9 s.append(i); 10 if(A[i - 1] != ' ') 11 s.append(A[i - 1]); 12 } 13 s.append(9); 14 String t = s.toString(); 15 if(t.length() == 9) 16 return; 17 Stack<Integer> r = new Stack<Integer>(); 18 Stack<Character> o = new Stack<Character>(); 19 for(int i = 0;i < t.length();i++) { 20 if(t.charAt(i) == '+' || t.charAt(i) == '-') { 21 if(r.size() == 2) { 22 int a1 = r.pop(); 23 int b1 = r.pop(); 24 char o1 = o.pop(); 25 if(o1 == '+') 26 r.push(a1 + b1); 27 else 28 r.push(b1 - a1); 29 } 30 o.push(t.charAt(i)); 31 continue; 32 } 33 int a = 0; 34 while(i < t.length() && t.charAt(i) >= '1' && t.charAt(i) <= '9') { 35 a = a * 10 + (t.charAt(i) - '0'); 36 i++; 37 } 38 i--; 39 r.push(a); 40 } 41 int a1 = r.pop(); 42 int b1 = r.pop(); 43 char o1 = o.pop(); 44 if(o1 == '+') 45 r.push(a1 + b1); 46 else 47 r.push(b1 - a1); 48 if(r.pop() == 110) 49 System.out.println(t); 50 } 51 52 public void dfs(int step, char[] A) { 53 if(step == 8) { 54 check(A); 55 } else { 56 for(int i = 0;i < 3;i++) { 57 A[step] = operation[i]; 58 dfs(step + 1, A); 59 } 60 } 61 } 62 63 public static void main(String[] args) { 64 Main test = new Main(); 65 char[] A = new char[8]; 66 test.dfs(0, A); 67 } 68 }
运行结果:
123+4+5+67-89 123+4-5-6-7-8+9 123-4+5-6-7+8-9 123-4-5+6+7-8-9 12+34+56+7-8+9 12+3+45+67-8-9 12-3+4-5+6+7+89 1+234-56-78+9 1+2+34+5+67-8+9 1-2+3+45-6+78-9
算法笔记_226:填符号凑算式(Java)相关推荐
- 算法笔记_029:约瑟夫斯问题(Java)
目录 1 问题描述 2 解决方案 1 问题描述 引用自<算法设计与分析基础>第三版: 约瑟夫斯问题,是以弗拉瓦斯.约瑟夫斯(Flavius Josephus)的名字命名的.约瑟夫斯是一 ...
- 算法笔记_183:历届试题 九宫重排(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着.与空格子相邻的格子中的卡片可以移动到空格中.经过若干次移动,可以形成 ...
- 算法笔记_188:历届试题 危险系数(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 抗日战争时期,冀中平原的地道战曾发挥重要作用. 地道的多个站点间有通道连接,形成了庞大的网络.但也有隐患,当敌人发现了某个站点后,其它站点 ...
- 算法笔记_231:网格中移动字母(Java)
目录 1 问题描述 2 解决方案 1 问题描述 2x3=6个方格中放入ABCDE五个字母,右下角的那个格空着.如图[1.jpg]所示. 和空格子相邻的格子中的字母可以移动到空格中,比如,图中的C和 ...
- 算法笔记_172:历届试题 波动数列(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 观察这个数列: 1 3 0 2 -1 1 -2 ... 这个数列中后一项总是比前一项增加2或者减少3. 栋栋对这种数列很好奇,他想知道长度 ...
- 蓝桥七届 凑算式 JAVA
B DEF A + --- + ------- = 10C GHI 这个算式中A~I代表1~9的数字,不同的字母代表不同的数字. 比如: 6+8/3+952/714 就是一种解法, 5+3/1+972 ...
- 算法笔记_048:找零问题(Java)
目录 1 问题描述 2 解决方案 2.1 动态规划法 1 问题描述 现需找零金额为n,则最少需要用多少面值为d1 < d2 < d3 < ... < dm的硬币?(PS:假 ...
- java 进制转换算法_算法笔记_033:十六进制转八进制(Java)
packagecom.liuzhen.systemExe;importjava.util.Scanner;public classMain {//把16进制字符串转成2进制字符串 publicStri ...
- 算法笔记_072:N皇后问题(Java)
目录 1 问题描述 2 解决方案 1 问题描述 把n个皇后放在一个n*n的棋盘上,使得任何两个皇后都不能相互攻击,即它们不能同行,不能同列,也不能位于同一条对角线上. 2 解决方案 本文采用全排列 ...
最新文章
- 腾讯云:新基建大潮下国产数据库的探索与思考 | 云·创课程实录
- 基于weblogic 的EJB 学习笔记-JSP教程,资料/其它
- 棋盘切割 DP POJ 1191
- 分时系统的用户具有独占性,因此一个用户可以独占计算机系统的资源.,课件2016计算机操作系统试题库(判断).doc...
- Final Project Proposal ——陈稳霖
- 计算机网络技术实验,计算机网络技术实验一
- linux编译器下载地址,GNU Compiler Collection(gcc编译器) v4.9.1 linux版
- Python 发送短信
- 【认证】JNCIE-SP备战心得
- 计量模型 | 前定变量#时间FE
- 微信小程序实践——实验3视频播放小程序
- 【计算机网络】湖南科技大学 笔记一
- mac使用hbuilderx安卓模拟器调试app
- ibm ilog mysql_IBM ILOG CPLEX Optimization Studio: 一个整数规划的案例
- FICO 里面的替代和校验 以及调试
- 关于IDEA导包出现错误,爆红的情况
- stm32F407时钟配置
- SQL Server(MSSQLSERVER)无法启动问题解决
- Win10系统开始菜单无法点击解决方法分享
- VBA 添加日历控件的操作