用java求解一道趣味体:123456789插入+,
最近在CSDN,看到了一道趣味题:123456789这九个按顺序排列的数,要求在它们之间插入若干个+,-,*,/ ,使其结果正好等于
100如:1*2*3*4+5+6+7*8+9=100。
看了题目后,思考如果用java如何实现。以下是我的解题思路:
思想比较简单,先将插入+,-,*,/后的所有字符串都穷举出来,然后计算哪些字符串等于100。
这里要解决两个问题,一个是怎样将所有的字符串都穷举出来,另一个是怎样将字符串的值计算出来。
第一个问题思路:插入+,-,*,/,其实应该是插入"+", "-", "*", "/", ""。插入""表示相邻数字组成一个数。用递归实现加入每个符号,直到加入最后一个数字。
第二个问题思路:使用栈先将一般的中缀表达式如1*2*3*4+5+6+7*8+9转成后缀表达式1 2 *3 *4 *5 +6 +7 8 *+9 +,
然后再用栈将后缀表达式的值求出,具体思路可以去看下栈在计算表达式值的应用。
以下是具体的代码:
import java.util.Stack;
import java.util.Vector;
public class Hundred {
/**
* 将中缀表达式转为后缀表达式
* @param expstr
* @return
*/
public static String toPostfix(String expstr) {
Stack<String> stack = new Stack<String>();
String postfix = "";
int i = 0;
while (i < expstr.length()) {
char ch = expstr.charAt(i);
switch (ch) {
case '+':
case '-': while (!stack.isEmpty()) {
postfix += stack.pop();
}
stack.push(ch +"");
i++;
break;
case '*':
case '/': while (!stack.isEmpty() && (stack.peek().equals("*")
|| stack.peek().equals("/"))) {
postfix += stack.pop();
}
 
相关文档:
Java学习从入门到精通
一、 JDK (Java Development Kit)
JDK是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库(rt.jar)。不论什么Java应用服务器实质都是内置了某个版本的JDK。因此掌握JDK是学好Java的第一步。最主流的J ......
Java NIO API详解
在JDK
1.4以前,Java的IO操作集中在java.io这个包中,是基于流的阻塞(blocking)API。对于大多数应用来说,这样的API使用很方
便,然而,一些对性能要求较高的应用,尤其是服务端应用,往往需要一个更为有效的方式来处理IO。从JDK 1.4起,NIO
API作为一个基于缓冲区,并能提供非阻塞(non-blo ......
-A-
AJAX: (建议不译,原因:专有名词) [Asynchronous JavaScript and XML,异步JavaScript及XML]
annotation: 注解
Ant: (建议不译,原因:专有名词)
AOP: (建议不译,原因:专有名词) [aspect-oriented programming, 面向层面编程]
application: 应用
argument: 参数
-B-
B2B: (建议不译,原因:专有名词) ......
众所周知,在程序开发中,难免会遇到需要匹配、查找、替换、判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力。因此,学习及使用正则表达式,便成了解决这一矛盾的主要手段。
大
家都知道,正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达 ......