矩阵乘法计算估量(矩阵乘法+括号优先级运算)Java


import java.util.*;

/**
 * 矩阵乘法计算估量(矩阵乘法+括号优先级运算)
 * @author Green.Gee
 * @date 2022/11/22 9:37
 * @email [email protected]
 */
public class MatrixMinusCalc {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) { // 注意 while 处理多个 case
            int n = in.nextInt();// 第一个矩阵行数

            Map<String,Integer[]> map = new HashMap<>();

            for(int i = 0;i < n;i++){
                String key = ((char)(65+i))+"";
                map.put(key,new Integer[]{
                        in.nextInt(), in.nextInt()});
            }

            System.err.println(map.toString());

            String line = in.next();
            System.err.println(line);

            int sum = 0;
            Stack<String> left = new Stack<>();
            for(int i = 0; i < line.length(); i++){
                char c = line.charAt(i);
                String key = c+"";
                if(c == ')'){
                    String item = "";
                    while(!left.isEmpty() && !left.peek().equals("(")) {
                        String a = left.pop();
                        item = a+"\t"+item;
                    }
                    left.pop();
                    System.err.println(item);

                    String[] tempCalc = item.split("\t");
                    String [] tempA = tempCalc[0].split("-");
                    String [] tempB =tempCalc[1].split("-");

                    int x = Integer.valueOf(tempA[0]);
                    int y = Integer.valueOf(tempA[1]);
                    int z = Integer.valueOf(tempB[1]);

                    sum += x * y * z;

                    Integer[] arr = new Integer[]{x,z};
                    left.push(arr[0]+"-"+arr[1]);

                    /* todo 括号中多个元素*/
                    for(int k = 2; k < tempCalc.length; k++){
                        x = arr[0];
                        y = arr[1];
                        z = Integer.valueOf(tempCalc[k].split("-")[1]);
                        sum += x * y * z;
                    }
                }else{
                    if(c == '('){
                        left.push(key);
                    }else{
                        Integer[] tempArr = map.get(key);
                        left.push(tempArr[0]+"-"+tempArr[1]);
                    }
                }
            }
            System.out.println(sum);
        }
    }
}

你可能感兴趣的:(算法【,Hard,Code】,java,矩阵,算法)