如题,这是一道求第二大和的问题,也是一道很平常的水题,但是要按照正常的“暴力”思路来做就要考虑几组特殊情况。
首先我们要对一串数字排序,然后再求和。但对于有负数,又有正数的一组数据,我们要考虑几种特殊情况。
例:
-2 1 答案1
-1 0 2 3 答案4
-5 0 2 3 答案3
这是菜鸟的看法,如果大神有简单的做法请无视我这种。
import java.util.Scanner;
public class Main{
public static void bubbleSort(int a[]){
int t1;
for(int i1=0;i1<a.length-1;i1++){
for(int j1=0;j1<a.length-1;j1++){
if(a[j1]>a[j1+1]){
t1=a[j1];
a[j1]=a[j1+1];
a[j1+1]=t1;
}
}
}
}
public static void main(String args[]){
int i,j;
int sum;
Scanner scanner=new Scanner(System.in);
int t=scanner.nextInt();
for(i=1;i<=t;i++){
sum=0;
int n=scanner.nextInt();
int[] a;
a=new int[n];
for(j=0;j<=n-1;j++){
a[j]=scanner.nextInt();
}
bubbleSort(a);
if(a[0]>0){
for(j=1;j<=n-1;j++){
sum=sum+a[j];
}
System.out.printf("%d\n",sum);
}
else
if(a[0]<0){
if(n==2)
{
int num2;
num2=a[0]+a[1];
if(num2 > a[0])
System.out.printf("%d\n",num2);
else
System.out.printf("%d\n",a[0]);
}
else
{
if(a[n-1]>0)
{
int max1=0,max2=0,max=0;
for(int g=n-1;g>=0;g--){
if(a[g]>=0)
max1=max1+a[g];
if(a[g]<0){
max2=max1+a[g];
break;
}
}
for(int g=n-1;g>=0;g--)
{
if(a[g]>0)
max=max+a[g];
if(a[g]<=0)
{
max=max-a[g+1];
break;
}
}
if(max > max2)
System.out.printf("%d\n",max);
else
System.out.printf("%d\n",max2);
}
if(a[n-1]==0){
for(int l=n-2;l>=0;l--)
{
if(a[l]!=0){
sum=sum+a[l];
System.out.printf("%d\n",sum);
break;
}
}
}
if(a[n-1]<0)
System.out.printf("%d\n",a[n-2]);
}
}
else
if(a[0]==0){
for(j=1;j<=n-1;j++){
if(a[j]!=0)
break;
}
int m=j;
for(m=j+1;m<=n-1;m++)
sum=sum+a[m];
System.out.printf("%d\n",sum);
}
}
}
}