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> //创建函数以计算数组的最大m个元素和最小m个元素之和之间的最大差 int find_diff(int arr[],int length,int m){ //for sorting the array sort(arr,length); int maxsum=0, minsum=0; //现在计算m元素的两个子集之间的最大差 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