对于此题,我的思路是十字交叉法,即最大的乘上最小的,最小的乘上最大的,然后求和得出结果。当然,在这一步必须建立在已经将所输入的数字排好序的基础上。
提交OJ也是100分。
#include<stdio.h>
#define T 1009
void queue(int b[],int m)
{
int i , j ,q;
for(i = 0 ; i < m ; i ++)
for(j = 0 ; j < m - i - 1; j ++)
{
if (b[j] > b[j + 1])
q = b[j+1] , b[j+1] = b[j],b[j] = q;
}
}
int main()
{
int N ;
scanf("%d",&N);
int temp_N = N ;
while(temp_N--){
int n , i , j ;
scanf("%d",&n);
int a[2][T];
for(j = 0 ; j < 2 ; j ++)
for(i = 0 ; i < n ; i ++)
scanf("%d",&a[j][i]);
for(j = 0 ; j < 2 ; j ++)
queue(a[j],n);
long long sum = 0 ;
for(i = 0 , j = n - 1 ; i < n && j > -1 ; i ++ , j --)
sum += a[0][i] * a[1][j];
printf("%d",sum);
printf("\n");
}
return 0 ;
}