#深信服9.14笔试题-C/C++客户端-第2题

问题描述:
两熊分蜜
吵架分家;
要求:
  1. 尽可能的重量均分,至少自己能少的最少;
  2. 在罐子数量上差距不能超过1。
输入描述:
  1. 每一行给出蜜罐的数量,2<= n <= 100
  2. 每蜜罐的重量 1< M <= 500
输出描述:
两个数字A B 分别表示熊大和熊二能分到蜜的总重

示例1:
输入:
3
447
56
249
输出:
305 447

代码实现
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
	vector<int> vec;
	int num_A = 0, num_B = 0;
	int n;
	cin >> n;
	while (n--)
	{
		int m;
		cin >> m;
		vec.push_back(m);
	}
	sort(vec.begin(), vec.end());

	//判断奇偶数
	int cnt = 0;
	if (vec.size() % 2 == 0) {
		cnt = vec.size() / 2;
	}
	else {
		cnt = (vec.size() + 1) / 2;
	}
	int sum = 0; //总和
	//求平均数
	for (int i = 0; i < vec.size(); i++) {
		sum += vec[i];				//总数
	}
	double sum_half;
	sum_half = sum / 2.0;	//均值

	int Diss = INT_MAX;	//差值
	int result = 0;

	for (int i = 0; i < cnt;i++) {
		int k = cnt;
		double temp = 0;	//临时总量
		int diss = 0;
		int left = i, right = i + k -1;
		while (k--) {
			temp += vec[right--];
		}
		if (abs(sum_half - temp) < Diss){
			Diss = abs(sum_half - temp);
			result = temp;
		}
	}
	cout << result << " " << sum - result;
    return 0;
}

#深信服笔试题##深信服##笔经#
全部评论
谢谢
点赞 回复
分享
发布于 2021-09-14 23:30
先排序,妙啊,不过怎么理论证明是最优值呢?
点赞 回复
分享
发布于 2021-09-15 00:25
联想
校招火热招聘中
官网直投
这题我dp过的。。。
点赞 回复
分享
发布于 2021-09-15 02:32
这题我偷了百分之二十,哈哈
点赞 回复
分享
发布于 2021-09-15 07:37
大佬 能解释一下吗
点赞 回复
分享
发布于 2021-09-15 08:58
这题简单的一批
点赞 回复
分享
发布于 2021-10-23 09:38
这代码都是错的呀
点赞 回复
分享
发布于 2023-06-29 00:40 四川

相关推荐

头像
不愿透露姓名的神秘牛友
04-18 01:10
字节 后端 10k go
点赞 评论 收藏
转发
4 20 评论
分享
牛客网
牛客企业服务