Вот логика пусть чисел быть и Ь, мы знаем
s = a + b
x = a^b
поэтому
x = (s-b)^b
Так как мы знаем, х, и мы знаем, с, так что для всех Интс происходит от 0 s - просто проверьте, удовлетворено ли это последнее уравнение.
вот код для этого
public List<Pair<Integer>> pairs(int s, int x) {
List<Pair<Integer>> pairs = new ArrayList<Pair<Integer>>();
for (int i = 0; i <= s/2; i++) {
int calc = (s - i)^i;
if (calc == x) {
pairs.add(new Pair<Integer>(i, s - i));
pairs.add(new Pair<Integer>(s - i, i));
}
}
return pairs;
}
пары Класс определяется как
class Pair<T> {
T a;
T b;
public String toString() {
return a.toString() + "," + b.toString();
}
public Pair(T a, T b) {
this.a = a;
this.b = b;
}
}
кодекса, чтобы проверить это:
public static void main(String[] args) {
List<Pair<Integer>> pairs = new Test().pairs(9,5);
for (Pair<Integer> p : pairs) {
System.out.println(p);
}
}
Выход:
2,7
7,2
3,6
6,3
Заметим, что A + B = 2 * (а & б) + (a^b) = 2 * (a | b) - (a^b), по определению вычислений суммированных бит и бит-бит в суммировании. – njuffa
Конкурсный вопрос ([Перекрестная ссылка] (http://codeforces.com/problemset/problem/627/A)) – njuffa
Спасибо @njuffaa, на самом деле я знаю это определение. Я застрял после этого. Если вы знаете, как решить, можете ли вы объяснить шаги. – user3111412