Tod*_*odo 5 c# arrays console 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]);
Run Code Online (Sandbox Code Playgroud)
然而问题是没有给出数组,而是从控制台读取数组,因此我不知道如何在输入后对元素进行异或.我到目前为止可以解决的代码是:
编辑:由于你的帮助,我设法正确完成了代码.
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);
}
}
Run Code Online (Sandbox Code Playgroud)
PS我是真正的菜鸟,所以请耐心等待!:)
Jon*_*eet 15
与Esailija的答案一样,但是使用foreach- 利用0 ^ x == x以下所有值的事实x:
int current = 0;
foreach (int value in array)
{
current ^= value;
}
Console.WriteLine(current);
Run Code Online (Sandbox Code Playgroud)
编辑:正如评论中所述,LINQ的Aggregate方法也会这样做 - 因为我们很高兴在第一步中使用前两个值,我们甚至不需要提供种子:
int xor = array.Aggregate((x, y) => x ^ y);
Run Code Online (Sandbox Code Playgroud)
Esa*_*ija 10
你可以写一个循环:
int initial = 0;
for( int i = 0; i < arr.Length; ++i ) {
initial ^= arr[i];
}
Console.WriteLine( initial );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6674 次 |
| 最近记录: |