WooKinson

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

 

问题描述
  给两组数,各n个。
  请调整每组数的排列顺序,使得两组数据相同下标元素对应相乘,然后相加的和最小。要求程序输出这个最小值。
  例如两组数分别为:1 3  -5和-2 4 1

  那么对应乘积取和的最小值应为:
  (-5) * 4 + 3 * (-2) + 1 * 1 = -25
输入格式
  第一个行一个数T表示数据组数。后面每组数据,先读入一个n,接下来两行每行n个数,每个数的绝对值小于等于1000。
  n<=8,T<=1000
输出格式
  一个数表示答案。
样例输入
2
3
1 3 -5
-2 4 1
5
1 2 3 4 5
1 0 1 0 1

样例输出


-25
6
题目描述

 

先上解法:

 1 #include <stdio.h>
 2 #include <algorithm>
 3 using namespace std;
 4 
 5 bool complate(int a,int b)
 6 {
 7     return a>b;
 8 }
 9 
10 int main(void)
11 {
12     int T,n,res;
13     int num1[8],num2[8];
14     scanf("%d",&T);
15     for (int i=0 ; i<T ; i ++)
16     {
17         res = 0;
18         scanf("%d",&n);
19         for (int j=0 ; j<n ; j ++)
20             scanf("%d",&num1[j]);
21         sort(num1,num1+n);            //默认从小到大排序 
22         
23         for (int j=0 ; j<n ; j ++)
24             scanf("%d",&num2[j]);
25         sort(num2,num2+n,complate); //加入函数,从大到小排序 
26         
27         for (int j=0 ; j<n ; j ++)
28             res += num1[j]*num2[j];
29         printf("%d\n",res);
30     }
31     
32     return 0;
33 }
C++解法

 

解题思路:

题目要求最后输出的是两数组相乘之和为最小,

把数组1从小到大排序

把数组2从大到小排序

最后将其对应下标的值相乘后的相加即为要求的值

posted on 2018-12-22 21:19  WooKinson  阅读(164)  评论(0编辑  收藏  举报