具体的可以看这篇文章
知道通过了第一个坑还有可能进入第二个坑,你有可能在想,将这些数字按照从小到大 进行排序,然后用所有的加号将大的数值加起来,然后将所有小的数值减了, 因为你觉得这道题没有括号和优先级之类的 但是这样又错了 后缀表达式是本来没有括号但是又有优先级的表达式,比如: +,+,-,-,1,2,3,4,5 如果是5+4+3-2-1=9 如果是后缀表达式5 4 3 + + 1 2 - - =13 对应中缀表达式5+4+3-(1-2)=13 所以这道题加上了后缀表达式就是有优先级的了 现在就是这道题所有的数中有正有负 如果所有都是正数,我们可以使用一个减号将其他的减号变成加号,有多少个减号 就将多少个减号放在括号里面让它变成加号,所以结果就是: 除了最小的数,所有的数加起来减去最小的数,就是 A+(B+C)-D 如果都是负数,就用加号的全部放在括号中让他变成正数,所以结果就是: 除了最大的数,其他的都是可以变成正数,可以改成 A+(B+C)-D 如果有正有负有,也是将负的全部变成正数,减号不够就用括号括起来再减 所以还是全部的绝对值加起来减去一个绝对值最小的 A+(B+C)-D 上面的(B+C)就是无论正负都可以变成正数的数, 上面所有的分类都是所有的数加起来,然后减去最小的,因为想将负数变成正数,必须 用减号来将它改成正数,但是最开始那个被减数就不能弄成正的 package competition3; import java.util.Scanner; public class ExpressionOfMy { public static int N,M; public static int[] number; public static void main(String[] args) { Scanner in = new Scanner(System.in); N=in.nextInt(); M=in.nextInt(); number=new int[N+M+1]; int min=0,max=0; for(int x=0;x<number.length;x++) { number[x]=in.nextInt(); if(number[min]>number[x]) { min=x; } if(number[max]<number[x]) { max=x; } } long sum=0; if(M==0) { for(int x=0;x<number.length;x++) { sum +=number[x]; } System.out.println(sum); } else { for(int x=0;x<number.length;x++) { sum +=Math.abs(number[x]); } sum=(sum-Math.abs(number[max])-Math.abs(number[min]))+(number[max]-number[min]); System.out.println(sum); } in.close(); } }