C语言中两个m元素子集的最大差值
任务是找到数组中m个元素之和的最大差值。假设我们有一个数组和一个数字m,那么我们将首先找到m个最大数字之和,然后从中减去m个最小数字之和,以获得最大差值。因此,主要任务是找到两个m个数字的子集,它们具有最大和和最小和。
让我们现在用一个例子来理解我们必须做什么:
输入
arr = {1,2,3,4,5} ; m=3
输出
Maximum difference here is : 6
解释:这里最大的3个数字是3,4,5,它们的和是12。最小的3个数字是1,2,3,它们的和是6。因此,最大差值是12-6,即6。
输入
arr = {10,13,22,8,16,14}; m=4
输出
Maximum difference here is : 20
解释:这里最大的4个数字是22,16,14,13,它们的和是65。最小的4个数字是8,10,13,14,它们的和是45。因此,最大差值是65-45,即20。
下面程序中使用的算法如下:
获取输入数组arr[]和一个用于创建集合的数字m。
在find_diff()函数中,我们传递输入数组及其长度,并返回m个元素集合之和的最大差值。
在这里,我们将首先对数组arr[]的元素进行排序。
然后我们将找到前m个和后m个元素的和,因为这些将是arr[]中最小的m个和最大的m个数。
最后我们返回差值。
注意:假设sort(arr[],int)返回已排序的数组。
示例
#include<stdio.h> //create function to calculate maximum difference between sum of highest and lowest m elements of array int find_diff(int arr[],int length,int m){ //for sorting the array sort(arr,length); int maxsum=0, minsum=0; //calculate now max difference between two subsets of m elements for(int i=0;i<m;i++){ minsum+=arr[i]; maxsum+=arr[length-i-1]; } return(maxsum-minsum); } // Driver program int main(){ int arr[]={1,1,2,3,5,7,1}; int m=3; cout << find_diff(arr,7,m); return 0; }
输出
如果我们运行上面的代码,我们将得到以下输出:
12
广告