用Java解决未完成方程的算法

时间:2015-03-21 16:38:01

标签: java algorithm

我正在尝试编写一个程序,当给定未完成的公式时,将输出最低位数,如果没有,则输出-1。我已完成所有输入,但在此阶段我不确定如何继续。

示例输入包括:1+1=?123*45?=5?088-5?*-1=519--45=5???*??=302?

任何有关如何解决此问题的提示都将受到赞赏。

import java.util.Scanner;
import java.util.regex.*;

public class Runes {

    public static void main(String[] args) {


        Scanner sc = new Scanner(System.in);
        int caseNo = sc.nextInt();
        for (int c = 0; c < caseNo; c++) {

            String input = sc.next();
            String re1="([-]?[0-9?]+)"; // -int1 or int1
            String re2="([+\\-*])";     //+ or - or *
            String re3="([-]?[0-9?]+)"; // -int2 or int2
            String re4="(=)";                   // Equals
            String re5="([-]?[0-9?]+)"; // -int3 or int3

            Pattern pattern = Pattern.compile(re1+re2+re3+re4+re5,Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
            Matcher matcher = pattern.matcher(input);

            if (matcher.find()) {

                String int1 = matcher.group(1);
                String op1 = matcher.group(2);
                String int2 = matcher.group(3);
                String op2 = matcher.group(4);
                String int3 = matcher.group(5);
                System.out.println(int1 + " " + op1 + " " + int2 + " " + op2 + " " + int3);
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

这是创建Java应用程序的一种方法。

  1. 创建一个整数索引数组,其中包含每个问号的值。换句话说,如果有5个问号,则整数索引数组有5个元素。

  2. 循环遍历整数索引数组。换句话说,对于5个问号,值应该是(见下面的布局)。

  3. 循环遍历整数索引数组,替换问号的索引值。

  4. 检查字符串是否是有效的等式。如果是这样,请将其保存在列表中。

  5. 循环完成后,打印列表值。

  6. 这是第2点的布局。

    0, 0, 0, 0, 0
    1, 0, 0, 0, 0
    ...
    9, 0, 0, 0, 0
    0, 1, 0, 0, 0
    ...
    9, 9, 9, 9, 9
    

    我使用您的输入示例来创建此输出。我在方程中添加了空格,使它们更容易阅读。我手动格式化此输出以适应屏幕

    1 + 1 = ?  -->  1 + 1 = 2
    123 * 45? = 5?088  -->  123 * 456 = 56088
    -5? * -1 = 5  -->  No equation exists
    19 - -45 = 5?  -->  No equation exists
    ?? * ?? = 302?  -->  57 * 53 = 3021     53 * 57 = 3021     72 * 42 = 3024     
                         42 * 72 = 3024     48 * 63 = 3024     56 * 54 = 3024     
                         36 * 84 = 3024     84 * 36 = 3024     54 * 56 = 3024     
                         63 * 48 = 3024     55 * 55 = 3025     89 * 34 = 3026     
                         34 * 89 = 3026