求这个程序的算法!!在线等,急!!!!!!

raingi520 2011-11-02 01:10:28
程序下载地址 http://ishare.iask.sina.com.cn/f/20514012.html

其中:
助火扇 是指 +2
取炭钳 是指 -2
小风箱 是指 *2

我想知道它的算法,能给出代码能使用的直接给分!!
...全文
92 2 点赞 打赏 收藏 举报
写回复
2 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
shine333 2011-11-02
public class Test {

public static final String OPERATORS = " +-*";

public static final int STEP_LIMIT = 12;

public static final BigDecimal VALUE = BigDecimal.valueOf(2);

public static void main(String[] args) throws Exception {
int[] operators = new int[STEP_LIMIT];
Scanner scanner = new Scanner(System.in);
System.out.println("Please input A:");
String aStr = scanner.next();
BigDecimal a = new BigDecimal(aStr);
System.out.println("Please input B:");
String bStr = scanner.next();
BigDecimal b = new BigDecimal(bStr);
if (find(a, b, operators, 0)) {
System.out.println(toExpression(a, b, operators));
} else {
System.out.println("Oops!");
}
}

public static boolean find(BigDecimal from,
BigDecimal to,
int[] operators,
int step) throws Exception {
if (step >= STEP_LIMIT) {
return false;
}
if (from.compareTo(to) == 0) {
return true;
}
for (int operator = 1; operator < OPERATORS.length(); operator++) {
operators[step] = operator;
if (find(newValue(from, operator), to, operators, step + 1)) {
return true;
}
}
operators[step] = 0;
return false;
}

public static BigDecimal newValue(BigDecimal from, int operator) {
switch (operator) {
case 1:
return from.add(VALUE);
case 2:
return from.subtract(VALUE);
case 3:
return from.multiply(VALUE);
default:
throw new RuntimeException();
}
}

public static String toExpression(BigDecimal a, BigDecimal b, int[] operators) {
StringBuilder buff = new StringBuilder(30).append(a);
for (int i = 0; i < operators.length && operators[i] != 0; i++) {
int operator = operators[i];
buff.append(OPERATORS.charAt(operator)).append(VALUE);
}
return buff.append("=").append(b).toString();
}
}

输出结果不考虑四则运算优先级。另外,不是最优解法。只是程序相对简单。
  • 打赏
  • 举报
回复
raingi520 2011-11-02
补充一下,这个程序的作用是,给出2个数,一个是A,另一个是B

A如何通过 +2、-2、*2 这三种运算操作,在12次运算(包含12次)以内得出B
  • 打赏
  • 举报
回复
相关推荐
发帖
非技术区
创建于2007-09-28

2.3w+

社区成员

Java 非技术区
申请成为版主
帖子事件
创建了帖子
2011-11-02 01:10
社区公告
暂无公告