5

私の本当の目的は、奇数回出現する唯一の配列要素を取得することです。そのため、配列のすべての要素を XOR することで実行できることがわかりました。このような:

int[] arr = { 3, 4, 7, 7, 0, 4, 0, 7, 3 };
Console.WriteLine(arr[0] ^ arr[1] ^ arr[2] ^ arr[3] ^ arr[4] ^ arr[5] ^ arr[6] ^ arr[7] ^ arr[8]);

ただし、問題は配列が指定されていないことですが、コンソールから読み取られているため、入力後に要素を XOR する方法がわかりません。これまでに解決できたコードは次のとおりです。

編集:あなたの助けのおかげで、コードを適切に仕上げることができました。

static void Main()
        {                
        int N = int.Parse(Console.ReadLine());
        long[] rectArray = new long[N];           

        for (int i = 0; i < N; i++)
        {
            rectArray[i] = long.Parse(Console.ReadLine());
        }
        long initial = rectArray[0]; 
        for (int i = 1; i < rectArray.Length; ++i)
        {
            initial ^= rectArray[i];
        }            
        Console.WriteLine(initial);
        }
}

PS 私は本当の初心者なので、しばらくお待ちください! :)

4

3 に答える 3

16

Esailjaの答えと同じ行に沿って、しかし使用-のすべての値に対してforeachという事実を利用して:0 ^ x == xx

int current = 0;
foreach (int value in array)
{
    current ^= value;
}
Console.WriteLine(current);

編集: コメントで述べたように、LINQ のAggregateメソッドもこれを行います。最初のステップで最初の 2 つの値を喜んで使用するため、シードを提供する必要さえありません。

int xor = array.Aggregate((x, y) => x ^ y);
于 2012-11-28T19:52:56.700 に答える
11

ループを書くことができます:

int initial = 0;
for( int i = 0; i < arr.Length; ++i ) {
    initial ^= arr[i];
}
Console.WriteLine( initial );
于 2012-11-28T19:51:10.510 に答える