2015-05-29 2 views
2

На самом деле это проблема хакерранка, одинокое целое число. Я понимаю используемую здесь логику XOR. Я просто не мог глубоко понять концепцию, как обрабатывается каждый номер после ввода. Я отметил строку в коде. Пожалуйста, помогите мне в понимании этого.Какое объяснение этому коду?

#include <iostream> 
using namespace std; 

int main() 
{ 
    int n, a, c = 0, i; 
    cin >> n; 
    for (i = 0; i < n; i++) 
    { 
     cin >> a; 
     c ^= a; // THIS LINE .... i WANT TO KNOW HOW IS THIS WORKING ? 
     // HOW IS COMPARISON BEING CARRIED OUT HERE ? 
    } 
    cout << a << endl; 
    return 0; 
} 
+0

Как начинающий программист, вы можете рассмотреть некоторые курсы. Эти вопросы, о которых вы спрашиваете, будут полностью покрыты. – Deanie

+1

Зачем мне проходить курс от одного эксперта, когда я могу учиться у экспертов по всему миру .... Просто шучу: P ..... Я на самом деле изучаю дизайн алгоритмов с использованием конкурентного программирования .... Спасибо за ваш проблемы, кстати. – Shubham

+0

См. Также http://stackoverflow.com/q/6398427/ – Nemo

ответ

2

Программа находит номер, который является одиноким, то есть не в паре. XORing число для себя приводит к 0. Используя эту концепцию, все числа XORed по одному. Пара чисел является xored, а затем результат записывается с другим числом во входной последовательности и так далее. Наконец, номер, который приходит один, будет оставлен.
Например:

Для ввода 1 1 2 3 0 0 3

1^1 = 0 
0^2 = 2 
2^3 = 1 
1^0 = 1 
1^0 = 1 
1^3 = 2 

и 2 одинок.

+0

Спасибо, что ответили:) .... но почему/как только слева отображается только там? почему не выводится для отображения с b^b = 0? – Shubham

+0

Спасибо :) Это очень полезно ... – Shubham

Смежные вопросы