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
以上是 C中m个元素的两个子集之间的最大差 的全部内容, 来源链接: utcz.com/z/335335.html