欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 美景 > 机试题——分糖果

机试题——分糖果

2025/10/14 11:17:56 来源:https://blog.csdn.net/weixin_45605341/article/details/145521251  浏览:    关键词:机试题——分糖果

题目描述

大哥和小哥是两兄弟,妈妈给了他们一大袋糖,每块糖都有属于自己的重量。

现在他们想要将这些糖分成两堆。分糖的任务当然落到了大哥的身上,然而小哥要求必须两个人获得的糖的总重量“相等”(根据他自己的逻辑),要不然就会哭。

非常不幸的是,小哥还非常小,并且他只会先将两个数转成二进制再进行加法,而且总会忘记进位。例如:

当12(1100)加5(101)时:
0101
+1001
=1100

其他例子:
5 + 4 = 1
7 + 9 = 14
50 + 10 = 56

现在大哥非常贪婪,他想要尽可能使自己得到的糖的总重量最大,且不让小哥哭。

输入描述

输入包含两行:
第一行是一个整数 N(2≤N≤15),表示袋中糖的数量。
第二行包含 N 个用空格分开的整数 Weight_i(1≤Weight_i≤10^6),表示第 i 块糖的重量。

输出描述

如果能让小哥不哭,输出大哥所能获得的糖的总重量;否则输出“NO”。

用例输入

3
1 5 4

解题思路

本题的目标是将糖分成两堆,使得两堆糖的“总重量”(根据题目逻辑)相等,同时最大化获得的糖的总重量。主要思路如下:

  • 计算总重量和异或值:遍历所有糖的重量,计算总重量 all 和所有重量的异或值 e。如果异或值 e 不为0,说明无法将糖分成两堆满足要求,直接输出“NO”。
  • 处理异或值为0的情况:如果异或值为0,说明可以将糖分成两堆,使得两堆的“总重量”相等。为了最大化自己的糖的总重量,可以将最小的糖分配给小哥,剩下的糖归Tazi。
  • 输出结果:输出获得的糖的总重量,即 all - mn,其中 mn 是最小的糖的重量。

代码

复制
#include <iostream>
#include <vector>
#include <queue>
#include <sstream>
#include <string>
#include <stack>
#include <algorithm>
#include <map>
#include <iomanip>
using namespace std;
#define msize  105int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int n;cin >> n;int nums[1005];int all = 0; // 总重量int mn = 1000000; // 最小的糖果重量int e = 0; // 总的异或值for (int i = 0; i < n; i++) {cin >> nums[i];e ^= nums[i]; // 累加异或值mn = min(mn, nums[i]); // 更新最小糖果重量all += nums[i]; // 累加总重量}if (e) { // 异或值不为0,无法分成两堆cout << "NO";} else {cout << all - mn; // 输出获得的糖的总重量}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词