首页 > 试题广场 >

表达式求值

[编程题]表达式求值
  • 热度指数:25437 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
今天上课,老师教了小易怎么计算加法和乘法,乘法的优先级大于加法,但是如果一个运算加了括号,那么它的优先级是最高的。例如:
1+2*3=7
1*(2+3)=5
1*2*3=6
(1+2)*3=9
现在小易希望你帮他计算给定3个数a,b,c,在它们中间添加"+", "*", "(", ")"符号,能够获得的最大值。

输入描述:
一行三个数a,b,c (1 <= a, b, c <= 10)


输出描述:
能够获得的最大值
示例1

输入

1 2 3

输出

9
import java.util.Scanner;
import java.util.Arrays;
public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int[] n=new int[3];
        for(int i=0;i<3;i++){
            n[i]=sc.nextInt();
        }
        Arrays.sort(n);
        int max1=n[0]+n[1]+n[2];//全1的情况
        int max2=(n[0]+n[1])*n[2];//部分有1的情况,例如(1+2)*3
        int max3=n[0]*n[1]*n[2];//无1的情况,例如2*3*4
        System.out.print(Math.max(max1,Math.max(max2,max3)));
    }
}

发表于 2020-02-26 17:03:15 回复(0)
  • 乱猜的规律,只要有1,那么就是两个最小的数加起来,再乘以第三个数,如果没有1,就是三个数相乘

    import java.util.*;
    public class Main
    {
      public static void main(String [] args)
      {
          Scanner sc=new Scanner(System.in);
          while(sc.hasNextInt())
          {
              int a=sc.nextInt();
              int b=sc.nextInt();
              int c=sc.nextInt();
              int [] array={a,b,c};
              Arrays.sort(array);
              if(array[0]==1)
              {System.out.println((array[0]+array[1])*array[2]);}
              else
              {
                  System.out.println(array[0]*array[1]*array[2]);
              }
          }
    
      }
    }
发表于 2020-02-12 19:56:23 回复(0)
/*
开始题目理解错了,一位+,*和()都要用完,按照这个思路,最大值就是最小两个相加,然后与最大的数相乘。但是调试过程说我case没通过,案例是输入6 7 9 然后输出378,我的输出是117。378就是6*7*9,那么就是可以用两次乘法,用乘法最大值就是所有相乘了。。。。加上一个判断语句。
*/

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
     public static void main(String args[]){
            Scanner sc = new Scanner(System.in);
            String next = sc.nextLine();
            String[] array = next.split(" ");
            int[] arrayInt = new int[3];
            for(int i = 0;i<3;i++) {
                arrayInt[i] = Integer.parseInt(array[i]);
            }
        /*for(int i = 0;i<arrayInt.length;i++) {
            System.out.println(arrayInt[i]);
        }*/
        
            int[] sort = Main.sort(arrayInt);
        /*for(int i = 0;i<array.length;i++) {
            System.out.println(sort[i]);
        }*/
            int k = (sort[0]+sort[1])*sort[2];
            int j = (sort[0]*sort[1])*sort[2];
            if(k>j)
                System.out.println(k);
            else
                System.out.println(j);
            
        }
        
        public int tt(String[] array){
            
            
            return 0;
        }
        
        //冒泡排序
        public static int[] sort(int[] array) {
            for(int j = 0;j<array.length-1;j++)
            for(int i = 0;i<array.length-j-1;i++) {
                if(array[i]>array[i+1]) {
                    int temp = array[i+1];
                    array[i+1] = array[i];
                    array[i] = temp;
                }
                
            }
            return array;
        }
}

发表于 2020-01-14 11:19:10 回复(0)
import java.util.*;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner cin = new Scanner(System.in);
		int a[] = new int[3];
		for (int i = 0; i < 3; i++) 
			a[i] = cin.nextInt();
		}

		Arrays.sort(a);
		int m1 = a[2] * a[1] * a[0];
		int m2 = a[2] * (a[1] + a[0]);
		System.out.print(Math.max(m1, m2));

	}

}

发表于 2019-11-07 12:06:47 回复(0)
import java.util.Scanner;
import java.util.Arrays;
//菜鸟一个,只能想到枚举法。[/苦笑/]
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();
        int c = sc.nextInt();
        int[] anwser = new int[5];
        anwser[0] = a + b + c;
        anwser[1] = a * b * c;
        anwser[2] = (a + b) * c;
        anwser[3] = (a + c) * b;
        anwser[4] = (b + c) * a;
        Arrays.sort(anwser);
        System.out.println(anwser[4]);
    }
}

发表于 2019-10-29 11:21:55 回复(0)
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();
        int c = sc.nextInt();

        getMax(a, b, c);
    }
    
    private static void getMax(int a, int b, int c) {

        int num1 = (a + b * c) > (a * (b + c)) ? (a + b * c) : (a * (b + c));
        int num2 = (a * b * c) > ((a + b) * c) ? (a * b * c) : ((a + b) * c);
        int max = num1 > num2 ? num1 : num2;
        System.out.println(max);
    }
}

发表于 2019-09-17 18:47:30 回复(0)
其实观察三个数排序后的表达式组合就可以发现,最大的值最会出现在两种情况:
1.(a + b) * c
2.a * b *c
所以只需要取这两个中的大者即可:
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String[] params = input.nextLine().split(" ");
        int[] nums = new int[3];
        for (int i = 0; i < 3; i++) {
            nums[i] = Integer.parseInt(params[i]);
        }
        System.out.println(Math.max(((nums[0] + nums[1]) * nums[2]), nums[0] * nums[1] * nums[2]));
    }
}


发表于 2019-09-10 20:35:45 回复(0)
import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String a = sc.nextLine();
        String[] arr = a.split(" ");
        int[] I = new int[6];
        I[0] = Integer.parseInt(arr[0]) * Integer.parseInt(arr[1]) * Integer.parseInt(arr[2]);
        I[1] = Integer.parseInt(arr[0]) + Integer.parseInt(arr[1]) + Integer.parseInt(arr[2]);
        I[2] = Integer.parseInt(arr[0]) + Integer.parseInt(arr[1]) * Integer.parseInt(arr[2]);
        I[3] = (Integer.parseInt(arr[0]) + Integer.parseInt(arr[1])) * Integer.parseInt(arr[2]);
        I[4] = Integer.parseInt(arr[0]) * Integer.parseInt(arr[1]) + Integer.parseInt(arr[2]);
        I[5] = Integer.parseInt(arr[0]) * (Integer.parseInt(arr[1]) + Integer.parseInt(arr[2]));
        Arrays.sort(I);
        System.out.println(I[I.length - 1]);
    }
}
最笨的办法,枚举出全部的可能,在输出最大值!菜鸟的解题思路!
发表于 2019-09-09 20:49:41 回复(0)
  • 给定范围为1-10闭区间,故定义为int型
  • 先排序,然后根据三个数中1的个数分情况讨论
  • 若三个都是1,则三数相加最大
  • 若有两个数是1,则最小值与次小值相加,并与最大值相乘最大
  • 若有一个数是1,则情况同上
  • 若最小值大于1,三数相乘最大
    import java.util.*;
    public class Main
    {
        public static void main(String[] args)
        {
            Scanner sc = new Scanner(System.in);
            int[] arr = new int[3];
            for(int i=0; i<3; i++)
            {
                arr[i]=sc.nextInt();
            }
            Arrays.sort(arr);
            int max=0;
            if(arr[0]==1 && arr[1]==1 && arr[2]==1)
                max = 3;
            else if(arr[0]==1 && arr[2]>1)
                max = (arr[0]+arr[1])*arr[2];
            else 
                max = arr[0]*arr[1]*arr[2];
            System.out.println(max);
        }
    }

编辑于 2019-09-08 20:04:13 回复(0)
Java解答:
import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        int a = input.nextInt();
        int b = input.nextInt();
        int c = input.nextInt();
        int[] sort = new int[4];
        sort[0] = a+b+c;
        sort[1] = a*b*c;
        sort[2] = (a+b)*c;
        sort[3] = a*(b+c);
        Arrays.sort(sort);
        System.out.println(sort[3]);
    }
}

编辑于 2019-08-02 19:35:51 回复(0)

import java.util.*;

public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
int b = scanner.nextInt();
int c = scanner.nextInt();
Main main = new Main();
System.out.println(main.calculateMax(a, b, c));
}

public int calculateMax(int a, int b, int c) {
    if (calcunlateTwo(calcunlateTwo(a,b), c) > calcunlateTwo(a, calcunlateTwo(b,c))) {
        return calcunlateTwo(calcunlateTwo(a,b), c);
    } else {
        return calcunlateTwo(a, calcunlateTwo(b,c));
    }
}

public int calcunlateTwo(int a, int b) {
    if (a * b > (a + b)) {
        return a * b;
    } else {
        return a + b;
    }
}

}

发表于 2019-07-25 15:57:51 回复(1)

思路:先选出前两个数相加或相乘最大的数,
定义这个较大的数为max,
若第三个数为1,则返回max+1,否则返回max*第三个数。


import java.util.Scanner;

public class Test {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();
        int c = sc.nextInt();

        int max = Math.max(a + b, a * b);
        if (c == 1) {
            System.out.println(max + 1);
        } else {
            System.out.println(max * c);
        }

    }

}
编辑于 2019-07-22 15:44:26 回复(6)
import java.util.Scanner;
public class Main {
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        while(scan.hasNext()){
        int times = 3;
        int[] number = new int[times];
        for(int i=0;i<times;i++){
            number[i]= scan.nextInt();
        }
        Main vo = new Main();    
        System.out.println(vo.getBigger(number[0], number[1], number[2]));
        }
        scan.close();
    }
    int getBigger(int a,int b,int c){
        int big = a*b*c;
        if((a+b)*c>big)  big = (a+b)*c;
        if((a+c)*b>big)  big = (a+c)*b;
        if((c+b)*a>big)  big = (c+b)*a;
        return big;
    }
}

发表于 2019-07-17 23:58:38 回复(0)
import java.util.Arrays;
import java.util.Scanner;

public class Main {

    public static int max1(int a, int b) {
        return Math.max(a + b, a * b);
    }

    public static int max2(int a, int b, int c) {
        return max1(max1(a, b), c);
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int[] num =  new int[3];
        for (int i = 0; i < 3; i++) {
            num[i] = sc.nextInt();
        }
        System.out.println(max2(num[0], num[1], num[2]));
    }
}
发表于 2019-06-30 15:34:49 回复(2)