赞
踩
所有题目均有五种语言实现。C实现目录、C++ 实现目录、Python实现目录、Java实现目录、JavaScript实现目录
Solo和koko是两兄弟,妈妈给了他们一大堆积木,每块积木上都有自己的重量。现在他们想要将这些积木分成两堆。
哥哥Solo负责分配,弟弟koko要求两个人获得的积木总重量“相等”(根据Koko的逻辑),个数可以不同,不然就会哭,但koko只会先将两个数转成二进制再进行加法,而且总会忘记进位(每个进位都忘记)。如当25(11101)加11(1011)时,koko得到的计算结果是18(10010):
11001
+010111
10010
Solo想要尽可能使自己得到的积木总重量最大,且不让koko哭。
输入描述:
3
3 5 6
第一行是一个整数N(2≤N≤100),表示有多少块积木;第二行为空格分开的N个整数Ci(1≤Ci≤10
6),表示第i块积木的重量。
输出描述:
11
让koko不哭,输出Solo所能获得积木的最大总重量;否则输出“NO”。
1:明显出题想偷懒,这不是和分苹果是一模一样的逻辑,就是描述不一样了。
2:题解直接看我分苹果的题解就可以,代码这里贴一个新的吧。
3:位运算:
符号 描述 运算规则 & 与 两个位都为1时,结果才为1 | 或 两个位都为0时,结果才为0 ^ 异或 两个位相同为0,相异为1 ~ 取反 0变1,1变0 << 左移 各二进位全部左移若干位,高位丢弃,低位补0 >> 右移 各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移)
1:位操作
2:题目理解
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <stdbool.h>
- #include <math.h>
- #include <limits.h>
- #include <float.h>
- #include <stdint.h>
- #include <ctype.h>
-
- #define CEILING_POS(X) ((X-(int)(X)) > 0 ? (int)(X+1) : (int)(X))
- #define CEILING_NEG(X) ((X-(int)(X)) < 0 ? (int)(X-1) : (int)(X))
- #define CEILING(X) ( ((X) > 0) ? CEILING_POS(X) : CEILING_NEG(X) )
-
- #define MIN(a, b) ((a) < (b)) ? (a) : (b)
- #define MAX(a, b) ((a) > (b)) ? (a) : (b)
-
- int cmpfunc (const void * a, const void * b) {
- return ( *(int*)a - *(int*)b );
- }
- //qsort(dp, m+1, sizeof(int), cmpfunc);
-
-
- int main() {
-
- int n;
- scanf("%d", &n);
- int min_num = 0;
- int total = 0;
- int xor_value = 0;
- for (int i = 0; i < n; i++) {
- int x;
- scanf("%d", &x);
- if (i == 0) {
- min_num = x;
- } else {
- min_num = MIN(min_num, x);
- }
- total += x;
- xor_value ^= x;
- }
- if (xor_value == 0) {
- printf("%d",total - min_num);
- } else {
- printf("NO");
- }
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。