美文网首页
枚举思想解决“运算操作符”问题

枚举思想解决“运算操作符”问题

作者: Kris_Ni | 来源:发表于2019-04-17 11:41 被阅读0次
    Q :在下面的算式中,添加"+" "-" "x" "/" 4个运算符(可重复),使得这个等式成立
        5 ? 5 ? 5 ? 5 ? 5 = 5
    

    看上去很简单的问题对吧,只要利用枚举思想把所有情况都列举出来
    然后验证等式是否成立就okay了
    但是,乘除的优先级是比加减的优先级要高的
    这就导致了算式怎么去计算的问题,如果是任意5个数呢?还有保证不会出现除0错误
    其实很简单,只需要强制让 "/" 后面的值不为0就可以解决除零问题
    通过定义leftright变量来来优先处理"x""/"操作,保存中间结果
    通过sign定义运算时的符号就可以很快解决问题了
    话不多数,代码撸先

    import java.util.Scanner;
    
    public class OperationProblem {
        public static void main(String[] args) {
            int[] i = new int[4];//表示4个运算符
            int sign;//累加运算时的符号
            int result; //结果
            int count = 0; //计数
            int[] num = new int[5]; //输入的5个数字
            float left,right; //保存中间结果
            char[] oper = new char[]{'+','-','*','/'};
            System.out.println("请输入5个数,之间用空格隔开:");
            Scanner scanner = new Scanner(System.in);
            for (int j=0;j<5;j++) {
                num[j] = scanner.nextInt();
            }
            System.out.println("请输入想要的结果:");
            result = scanner.nextInt();
            for (i[0] = 0;i[0]<4;i[0]++) {
                if (i[0] < 3 || num[1] != 0) {
                    for (i[1] = 0 ;i[1]< 4;i[1]++) {
                        if (i[1] < 3 || num[2] != 0) {
                            for (i[2]=0;i[2]<4;i[2]++) {
                                if (i[2] < 3 || num[3]!=0) {
                                    for (i[3] = 0;i[3]<4;i[3]++) {
                                        if (i[3]<3 || num[4] != 0) {
                                            left = 0;
                                            right = num[0];
                                             sign = 1;
                                            for (int j=0;j<4;j++) {
                                                switch (oper[i[j]]) {
                                                    case '+':
                                                        left = left + sign*right;
                                                        sign = 1;
                                                        right = num[j+1];
                                                        break;
                                                    case '-':
                                                        left = left + sign*right;
                                                        sign = -1;
                                                        right = num[j+1];
                                                        break;
                                                    case '*':
                                                        right = right*num[j+1];
                                                        break;
                                                    case '/':
                                                        right = right/num[j+1];
                                                        break;
                                                }
                                            }
                                            if (left + sign*right == result) {
                                                count++;
                                                System.out.println("count :" + count);
                                                for (int j=0;j<4;j++) {
                                                    System.out.print(num[j]+" "+ oper[i[j]] +" ");
                                                }
                                                System.out.println(num[4]+" = "+result);
                                                System.out.println();
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            if (count == 0) {
                System.out.println("没有符合要求的算式!");
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:枚举思想解决“运算操作符”问题

          本文链接:https://www.haomeiwen.com/subject/xivgwqtx.html