解题思路:

本题利用两个数组分别存储两组数据。我使用的是vector动态数组。

要使得所有配对元素差的绝对值之和最大。

可以将第一个数组中元素升序(或降序),第二个数组中元素降序(或升序)。

如题目引例中n=4时,

两组数据2 5 6 3 和   1 4 67     变换后  6 5 3 2  和 1 4 6 7

那么绝对值之差最大就是|6-1|+|5-4|+|3-6|+|2-7|

1546103110702949.png
之所以我使用vector容器来存储两组数据主要是由于操作方便,分别用push_back(data)将数据存入vector容器中。然后可以利用#include <algorithm>中的sort函数自动给两个容器排序,省去了人工排序的麻烦。

对于绝对值,主要使用#include <math.h>中的abs()函数。

注意事项:

升序 :

sort(vec.begin(),vec.end());

降序:

sort(vec.rbegin(),vec.rend());

参考代码:

#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
int main()
{
	int n,data,sum=0;
	cin>>n;
	vector<int> vec1,vec2;   //定义两个vector容器
	for(int i=0; i<n; i++)
	{
		cin>>data;
		vec1.push_back(data); //插入数据
	}
	for(int i=0; i<n; i++)
	{
		cin>>data;
		vec2.push_back(data); //插入数据
	}
	sort(vec1.begin(),vec1.end());   //升序
	sort(vec2.rbegin(),vec2.rend()); //逆序 
	for(int i=0; i<n; i++)
	{
		sum+=abs(vec1[i]-vec2[i]); //两数之差的绝对值
	}
	cout<<sum<<endl;
}


点赞(9)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 1 条评论

镜牙 5年前 回复TA
#include<stdio.h>
#include<stdlib.h>
int main()
{
    int a[1000],b[1000],i,j,flag,n,temp,sum=0 ;
    
    scanf ("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    for(i=0;i<n;i++)
    {
        scanf("%d",&b[i]);
    }
    for(i=1;i<n;i++)
    {
        flag=0;
        for(j=n-1;j>=i;j--)
        {
            if(a[j]>a[j-1])
            {
                temp=a[j];
                a[j]=a[j-1];
                a[j-1]=temp;
                flag=1;
            }
            
           
        }
        if(flag==0)
        {
            break;
        }
    }
    for(i=