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

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

作者: 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("没有符合要求的算式!");
        }
    }
}

相关文章

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

    Q :在下面的算式中,添加"+" "-" "x" "/" 4个运算符(可重复),使得这个等式成立 看上去很简单的问...

  • Kotlin操作符号用法大全

    Kotlin操作符、运算符号用法大全 前言:)Scala :想解决Java表达能力不足的问题Groovy :想解...

  • swift第一篇--基本运算

    基本运算 术语 运算操作 术语 一元操作符(前置操作符) 二元操作符 三木操作符 赋值操作 运算操作 加减乘除 ...

  • 前端基本功:JS必记知识点+案例(六)运算符

    运算符 一元操作符 ++, -- + - 逻辑操作符 ! && || 基本运算符 +, -, *, /, % 关系...

  • 4.操作符

    操作符 算术操作符 在Java语言里,下面几个符号称为算术操作符 符号名称作用+加加法运算-减减法运算*乘乘法运算...

  • Dart 笔记 4 - 运算符

    算术运算符 自增自减运算符 关系运算符 类型测试操作符 赋值操作符 -=、/=、%=、>>=、^=、+=、*=、~...

  • Dart入门第二课-运算符

    算术运算符 自增自减运算符 关系运算符 类型测试操作符 赋值操作符 -=、/=、%=、>>=、^=、+=、*=、~...

  • 09 js04 继承模式、命名空间、对象枚举

    继承模式、命名空间、对象枚举 【附:this指向问题、arguments、逗号操作符、对象克隆】 1、继承模式:【...

  • JS基础---02运算

    JavaScript基础 1 - 运算符(操作符) 1.1 运算符的分类 运算符(operator)也被称为操作符...

  • Swift - 高级运算符介绍

    除了基本运算符之外,Swift还支持位运算和位移运算,包括:1、按位取反运算:操作符是 ~2、按位与运算:操作符是...

网友评论

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

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