有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)
思路:异或运算,排序取最大
#include <stdio.h>
int main()
{
int n;
scanf("%d", &n);
int *list = malloc(sizeof(int) * n);
int sum = 0;
int min = -1, sum10 = 0;
for (int i = 0; i < n; i++) {
scanf("%d", &list[i]);
sum ^= list[i];
sum10 += list[i];
if (i == 0) {
min = list[0];
} else {
if (min > list[i]) {
min = list[i];
}
}
}
if (sum != 0) {
printf("-1\n");
return 0;
}
printf("%d\n", sum10 - min);
return 0;
}