华为OD机试题蒙蔽求解

有A,B两个同学想要分苹果。A的想法是使用二进制进行,1 + 1相加不进一位,如(9 + 5 = 1001 +101 = 12)。B同学的想法是使用十进制进行,并且进一位。会输入两组数据,一组是苹果总数,一组分别是每个苹果的重量。如果让B同学在满足A同学的情况下获取到苹果的总重量且返回,如果不能则返回-1。
输入
3
3 5 6

返回
11

备注:按照A同学的想法 5 + 6 =  3 (101 + 110 = 010)

看到这题我是懵逼的!我都不知道11是哪来的,还有这道题到底是让我干嘛!哭脸~(传说中的第一题,最简单的题)
#华为笔试##笔试题目##华为#
全部评论
华为OD可以联系我
2 回复 分享
发布于 2022-03-24 17:28
public static void main(String[] args) {         Scanner scanner = new Scanner(System.in);         int n = scanner.nextInt();         int[] nums = new int[n];         for (int i = 0; i <n ; i++) {             nums[i] = scanner.nextInt();         }         // 按照A的想法,如果能后平分,那么所有重量异或后就==0         int xor = 0;         for (int i = 0; i <n ; i++) {             xor ^= nums[i];         }         if (xor==0){             // 能平分             Arrays.sort(nums);             // B能拿的最大重量:就是n-1个最大重量的苹果             int bSum = 0;             for (int i = 1; i < n; i++) {                 bSum += nums[i];             }             System.out.println(bSum);         }else {             // 不能平分             System.out.println(-1);         }     }
9 回复 分享
发布于 2022-03-29 11:26
所有重量全部用二进制相加等于0则满足A的要求。最小的一个给A,剩下的全给B。
8 回复 分享
发布于 2022-02-25 07:11
这题出的真臭。
3 回复 分享
发布于 2022-06-09 13:04
疑惑 异或
3 回复 分享
发布于 2022-02-21 20:20
二进制不进位就是按位异或,十进制进位就是正常加法,所以就是把数据分成两组,每组按位异或,如果两组结果相等,然后取两组十进制相加结果大的那个数,然后将所有分组方法里结果最大的作为返回值。 两个知识点,按位异或,求所有组合。
3 回复 分享
发布于 2022-02-19 10:50
意思就是 平分苹果 比如例子中 对a的算法来说 b拿到的是5+6=3个 剩下个3 所以a和b是平分的 但是对b来说 他拿到的是11个苹果 所以满足a同学之后最大数量是11
3 回复 分享
发布于 2022-02-10 09:23
我也懵了,题目打完了么,9+5=12是要每个人分6么,满足的a同学的条件是啥条件啊,是要在二进制中相同的位上有1么😰
2 回复 分享
发布于 2022-02-10 09:21
这里我认为题目说的不是太清楚,题目里,满足A的情况下,A是个什么情况,题目没有说清楚。 没有说清楚的点有: a, A平分苹果的标准:所有数加起来都是0即为平分, 题目没说。 b, 如果苹果可以平分的情况,A应该拿到的苹果是N组数据的其中一组数就可以。题目没说 可以举例,如3,5,6这批苹果,A可拿到的苹果有3,或者5,或者6,拿到最少的是3.
1 回复 分享
发布于 2023-06-24 16:08 湖北
感谢楼主提供题目,我斗胆写了一个简单的思路和代码,可以交流一下。我放在知乎了:https://zhuanlan.zhihu.com/p/521401344
1 回复 分享
发布于 2022-05-29 12:57
这题我昨天做的,所有元素异或为0取最小的那个。不为零就返回-1
1 回复 分享
发布于 2022-05-23 16:54
我超,我今天也遇到了,用异或只a了55%😅
1 回复 分享
发布于 2022-03-14 22:21
华为od的题真实云里雾里的表达,b同学满足a同学什么?
点赞 回复 分享
发布于 09-14 00:15 河北
public static void main(String[] arg){ Scanner sc = new Scanner(System.in); int len = sc.nextInt(); int[] arr = new int[len]; for(int i=0;i
点赞 回复 分享
发布于 2023-09-07 16:10 北京
其实就是异或运算。属于一个脑筋急转弯吧
点赞 回复 分享
发布于 2022-10-27 11:31 四川
遇到一样的了,完全没读明白,做完另外两道读了1个半小时的题,硬是没明白要干嘛。😂
点赞 回复 分享
发布于 2022-07-02 00:16
A 认为平分的条件, 两堆 苹果 的异或相同, 即 所有苹果异或 为0
点赞 回复 分享
发布于 2022-03-29 11:49
随手写了下,Java的 public class Main{     public static void main(String[] args) {         Scanner sc = new Scanner(System.in);         int all = sc.nextInt();//苹果总数         int[] arr = new int[all];         int i=0;         for (int j = 0; j <all; j++) {             arr[i++]=sc.nextInt();         }         int temp = arr[0];         for (int j = 1; j < arr.length; j++) {             temp=temp^arr[j];         }         Arrays.sort(arr);         int res = arr[0]; // 取最小值的二进制         String s = Integer.toBinaryString(res);          if (temp!=0){             System.out.println("-1");         }else {             System.out.println(s);         }     } }
点赞 回复 分享
发布于 2022-03-28 22:25
华为计算产品线OD软件开发岗位! Base地杭州!对接组内,团队氛围好! 感兴趣可以私信我!从简历到机试到面试一条龙服务! 详情:https://www.nowcoder.com/discuss/850728?type=all&
点赞 回复 分享
发布于 2022-03-08 12:18

相关推荐

09-11 10:30
门头沟学院 C++
隔壁刷到的,请问几年前真的是这样吗
智能搬砖:21年已经有点难了,后面越来越难,主要是入行的卷王太多了,前几年培训机构搞宣传火了一波,像张雪峰有两年都在推计算机,进去的几百万卷王还没毕业呢,起码还要再卷五六年,到时候估计大厂就只要985了,211也得来跟我们卷外包了😂
我的秋招日记
点赞 评论 收藏
分享
也许是天气_:实习这块全是假大空像AI生成的,没有实际内容。要体现出难点、亮点、解决问题的过程
点赞 评论 收藏
分享
评论
16
78
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务