Find the Maximum sum

时间:2024-08-07 20:04:26

Given an array of n elements.Find the maximum sum when the array elements will be arranged in such way. Multiply the elements of each pair and add to get maximum Sum. Sum could be larger so take mod with 10^9+7.

Example1:
Input:  n=
        -,,,,-,-,
Output:
So to ,-},{-,},{,} and {}.So the answer *(-))+((-)*)+(*)+() ={}.

Example2:
Input:  n=
        -,,
Output:
So to ,} and {}.So the answer )*)+()={}.

Input:
The first line consists of an integer T i.e number of test cases. The first line of each test case consists of an integer n.The next line consists of n spaced integers(positive or negative).

Output:
Print the maximum sum % 10^9+7.

Constraints: 
1<=T<=100
1<=n,a[i]<=10000

Example:
Input:
2
3
8 7 9
6
-1 9 4 5 -4 7

Output:
79
87

下面是我的代码实现:

主要思路:(假设0是负数)

先对于输入的数组进行排序。排序按照从小到大的顺序。

如果数组个数是偶数个,那么直接按照顺序两两相乘然后相加即可得到最大和。

如果数组个数是奇数,需要考虑正数负数的个数,其中负数为偶数个,正数是奇数个(例如:-7  -4  -1  0  4  5  9)只需要将负数依次两两相乘,忽略第一个正数,其余正数依次两两相乘再求和即可得到最大和。如果负数的个数是奇数个,正数是偶数个(例如:-7  -4  -1  4  5  9  10)只需要跳过最后一个负数,其余依次相乘然后相加即可得到最大和。

具体代码实现如下:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int num,i;
    scanf("%d",&num);
    int *result=(int *)malloc(sizeof(int)*num);
    ;i<num;i++)
    {
        int N,j,k,temp;
        ;
        scanf("%d",&N);
        int *Arr=(int *)malloc(sizeof(int)*N);
        ;j<N;j++)
            scanf("%d",&Arr[j]);
        //首先是对于数组元素进行排序。这里随便用一个冒泡排序。
        ;j<N;j++)
        {
            ;k<N;k++)
            {
                ])
                {
                    temp=Arr[k];
                    Arr[k]=Arr[k+];
                    Arr[k+]=temp;
                }
            }
        }

        ==)//N是偶数,两两相乘即可。
        {
            ;j<N;j=j+)
            {
                sum=sum+Arr[j]*Arr[j+];
            }
        }
        else//N是奇数的情况
        {
            k=;
            ;j<N;j++)
            {
                )
                {
                    k++;//记录负数的个数
                }
            }
            ==) //数组中正奇、负偶:跳过第一个正数Arr[k]
            {
                ;j<N;j=j+)
                {
                    if(j!=k)
                    {
                        sum=sum+Arr[j]*Arr[j+];
                    }
                    else
                    {
                        sum=sum+Arr[k];
                        j--;
                    }
                }
            }
            else//数组中正偶、负奇:跳过最后一个负数Arr[k-1]
            {
                ;j<N;j=j+)
                {
                    ))
                    {
                        sum=sum+Arr[j]*Arr[j+];
                    }
                    else
                    {
                        sum=sum+Arr[k-];
                        j--;
                    }
                }
            }
        }
        result[i]=sum;
    }
    ;i<num;i++)
        printf("%d\n",result[i]);

    ;
}

但是这个程序,现在没有正确通过,在本地运行是没问题的,但是在geeksforgeeks上结果如下:

Find the Maximum sum

who can help me?