最小乘积(基本型)
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 }