最小乘积(基本型)

 

 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 }
posted @ 2015-03-08 14:30  LeoFeng  阅读(431)  评论(0编辑  收藏  举报