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