![]()
1 #include<stdio.h>
2
3 int main()
4 {
5 int i,j,k;
6 int t,n; //t:数据组数;n:每组数据的两行中每行的个数
7 int a[2][8]; //用于存储输入的每组数据中的两行数据
8 int temp; //用于对每行数据排序的过程中的中间临时变量
9 int sum; //用于记录两行数据乘积的和
10
11 scanf("%d",&t); //输入数据组数
12
13 for(i=t;i>0;i--) //分组输入和处理
14 {
15 sum=0; //清零乘积和
16
17 scanf("%d",&n); //输入两行数据中每行的个数
18
19 for(j=0;j<2;j++) //输入两行数据
20 for(k=0;k<n;k++)
21 scanf("%d",&a[j][k]);
22
23 /***********************************************************************
24 **要实现最小乘积,只需要找出两行数据中未相乘的最大值和最小值相乘,
25 **然后相加即可,所以分别对两行数据进行降序和升序排序
26 ***********************************************************************/
27 for(j=0;j<n-1;j++) //使用冒泡排序法分别对两行数据进行降序排序和升序排序
28 for(k=j+1;k<n;k++)
29 {
30 if(a[0][k]>a[0][j]) //降序
31 {
32 temp=a[0][j];
33 a[0][j]=a[0][k];
34 a[0][k]=temp;
35 }
36 if(a[1][k]<a[1][j]) //升序
37 {
38 temp=a[1][j];
39 a[1][j]=a[1][k];
40 a[1][k]=temp;
41 }
42 }
43
44 for(j=0;j<n;j++) //求两行数据中相同下标的元素对应相乘,然后相加求和
45 sum+=a[0][j]*a[1][j];
46
47 printf("%d\n",sum); //输出最小乘积和
48 }
49
50 return 0;
51 }