2015-12-12 2 views
0

Я только что вернулся из технического интервью/теста C#, но был несколько озадачен одной из головоломок. Может ли кто-нибудь помочь в решении, поскольку я не могу это решить, и это действительно меня беспокоит. Проблема заключалась в том:C# Инверсная функция Xor

Написать обратную функцию Xor для следующего метода:

public int[] XorFunction(int[] array) 
{ 
    for (int i = array.Length - 1; i > 0; i--) 
    { 
     int first = array[i]; 
     int second = array[i - 1]; 
     array[i] ^= second; 
    } 
    return array; 
} 

Я больше парня базы данных, поэтому не совсем уверен XORing функции. Я пришел к наивному итерации [1..array.length] и установил массив [i]^= array [i + 1], но я уверен, что это было неправильно, поскольку я бы изменил значение для array [i], а затем использовать его для xor со следующим числом.

Его пристанет мне becuase кажется довольно прямо вперед проблемы ...

+0

INVERS XOR точно таки XOR. a = b^(a^b) – jdweng

ответ

0

Не совсем уверен, что вы пытаетесь сделать, цикл точно не имеет смысла ...?

Однако вы можете перевернуть биты или «инвертировать» результат с помощью оператора ~.

Так var a = ~(a^b);

0

Код:

public int[] UnXorFunction(int[] array) 
{ 
    for (int i = 1; i < array.Length; ++i) 
    { 
     int v = array[i - 1]; 
     array[i] ^= v; 
    } 
    return array; 
}