c++求一个数组中所有数字分为两半差最小,求两半中大的一半完整代码
时间: 2024-10-05 18:04:36 浏览: 33
求最小公倍数的方法_C++_最小公倍数的几种求法_联合公倍数_
5星 · 资源好评率100%
在C++中,要解决这个问题,我们可以使用排序算法先对数组进行排序,然后找到中间位置将数组分成两个部分。最后比较这两个部分的和,选择较大的一半并减去较小的一半,得到的就是差值最小的部分。下面是一个简单的示例代码:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
int find_half_with_smallest_difference(std::vector<int>& nums) {
// 对数组进行排序
std::sort(nums.begin(), nums.end());
int sum = 0;
for (int i = 0; i < nums.size(); i++) {
sum += nums[i];
}
// 计算总数
int total = sum;
// 找到中点
int mid = nums.size() / 2;
if (nums.size() % 2 == 0) { // 如果数组长度是偶数
return total / 2 - mid;
} else { // 如果数组长度是奇数,较大的那一半会多一个元素
return total / 2 - mid + nums[mid];
}
}
int main() {
std::vector<int> arr = {1, 5, 3, 9, 6};
int min_diff = find_half_with_smallest_difference(arr);
std::cout << "The smallest difference between two halves is: " << min_diff << std::endl;
return 0;
}
```
在这个代码中,`find_half_with_smallest_difference`函数负责处理主要逻辑,首先计算整个数组的和,然后根据数组长度是奇数还是偶数来确定哪一半更大。
阅读全文