📌  相关文章
📜  用奇数XOR计数对

📅  最后修改于: 2021-04-24 14:50:57             🧑  作者: Mango

给定一个由n个整数组成的数组。找出XOR为奇数的数组中的对数。

例子 :

Input : arr[] = { 1, 2, 3 }
Output : 2
All pairs of array
1 ^ 2 = 3
1 ^ 3 = 2
2 ^ 3 = 1

Input : arr[] = { 1, 2, 3, 4 }
Output : 4

天真的方法:通过运行两个循环,我们可以找到XOR为奇数的对。如果两个数的XOR为奇数,则增加对数。

C++
// C++ program to count pairs in array
// whose XOR is odd
#include 
using namespace std;
  
// A function will return number of pair
// whose XOR is odd
int countXorPair(int arr[], int n)
{
    // To store count of XOR pair
    int count = 0;
  
    for (int i = 0; i < n; i++) {
        for (int j = i + 1; j < n; j++)
  
            // If XOR is odd increase count
            if ((arr[i] ^ arr[j]) % 2 == 1)
                count++;
    }
  
    // Return count
    return count;
}
  
// Driver program to test countXorPair()
int main()
{
    int arr[] = { 1, 2, 3 };
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << countXorPair(arr, n);
  
    return 0;
}


Java
// Java program to count pairs in array whose
// XOR is odd
public class CountXor {
    // A function will return number of pair
    // whose XOR is odd
    static int countXorPair(int arr[], int n)
    {
        // To store count of XOR pair
        int count = 0;
  
        for (int i = 0; i < n; i++) {
            for (int j = i + 1; j < n; j++)
  
                // If XOR is odd increase count
                if ((arr[i] ^ arr[j]) % 2 == 1)
                    count++;
        }
  
        // Return count
        return count;
    }
  
    // Driver program to test countXorPair()
    public static void main(String[] args)
    {
        int arr[] = { 1, 2, 3 };
        System.out.println(countXorPair(arr, arr.length));
    }
}


Python 3
# Python 3 program to count 
# pairs in array whose XOR is odd
  
# A function will 
# return number of pair
# whose XOR is odd
def countXorPair(arr, n):
  
    # To store count of XOR pair
    count = 0
  
    for i in range(n):
        for j in range(i + 1, n):
  
            # If XOR is odd increase count
            if ((arr[i] ^ arr[j]) % 2 == 1):
                count += 1
  
    # Return count
    return count
  
# Driver Code
if __name__ == "__main__":
    arr= [ 1, 2, 3 ]
    n = len(arr)
    print(countXorPair(arr, n))
  
# This code is contributed
# by ChitraNayal


C#
// C# program to count pairs in 
// array whose XOR is odd
using System;
  
public class CountXor {
      
    // A function will return number of pair
    // whose XOR is odd
    static int countXorPair(int[] arr, int n)
    {
        // To store count of XOR pair
        int count = 0;
  
        for (int i = 0; i < n; i++) {
            for (int j = i + 1; j < n; j++)
  
                // If XOR is odd increase count
                if ((arr[i] ^ arr[j]) % 2 == 1)
                    count++;
        }
  
        // Return count
        return count;
    }
  
    // Driver program to test countXorPair()
    public static void Main()
    {
        int[] arr = {1, 2, 3};
        Console.WriteLine(countXorPair(arr, arr.Length));
    }
}
  
// This code is contributed by vt_m.


PHP


C++
// C++ program to count pairs in array
// whose XOR is odd
#include 
using namespace std;
  
// A function will return number of pair
// whose XOR is odd
int countXorPair(int arr[], int n)
{
    // To store count of odd and even
    // numbers
    int odd = 0, even = 0;
  
    for (int i = 0; i < n; i++) {
        // Increase even if number is
        // even otherwise increase odd
        if (arr[i] % 2 == 0)
            even++;
        else
            odd++;
    }
  
    // Return number of pairs
    return odd * even;
}
  
// Driver program to test countXorPair()
int main()
{
    int arr[] = { 1, 2, 3 };
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << countXorPair(arr, n);
  
    return 0;
}


Java
// Java program to count pairs in array whose
// XOR is odd
  
public class CountXor {
    // A function will return number of pair
    // whose XOR is odd
    static int countXorPair(int arr[], int n)
    {
        // To store count of odd and even numbers
        int odd = 0, even = 0;
  
        for (int i = 0; i < n; i++) {
            // Increase even if number is
            // even otherwise increase odd
            if (arr[i] % 2 == 0)
                even++;
            else
                odd++;
        }
  
        // Return number of pairs
        return odd * even;
    }
  
    // Driver program to test countXorPair()
    public static void main(String[] args)
    {
        int arr[] = { 1, 2, 3 };
        System.out.println(countXorPair(arr, arr.length));
    }
}


Python 3
# Python 3 program to count 
# pairs in array whose XOR is odd
  
# A function will
# return number of pair
# whose XOR is odd
def countXorPair(arr, n):
  
    # To store count of 
    # odd and even numbers
    odd = 0
    even = 0
  
    for i in range(n):
          
        # Increase even if number is
        # even otherwise increase odd
        if arr[i] % 2 == 0:
            even += 1
        else:
            odd += 1
  
    # Return number of pairs
    return odd * even
  
# Driver Code
if __name__ == "__main__":
    arr = [ 1, 2, 3 ]
    n = len(arr)
    print(countXorPair(arr, n))
  
# This code is contributed 
# by ChitraNayal


C#
// C# program to count pairs in
// array whose XOR is odd
using System;
  
public class CountXor {
      
    // A function will return number of pair
    // whose XOR is odd
    static int countXorPair(int[] arr, int n)
    {
        // To store count of odd and even numbers
        int odd = 0, even = 0;
  
        for (int i = 0; i < n; i++) {
              
            // Increase even if number is
            // even otherwise increase odd
            if (arr[i] % 2 == 0)
                even++;
            else
                odd++;
        }
  
        // Return number of pairs
        return odd * even;
    }
  
    // Driver program to test countXorPair()
    public static void Main()
    {
        int[] arr = {1, 2, 3};
        Console.WriteLine(countXorPair(arr, arr.Length));
    }
}
  
// This code is contributed by vt_m.


PHP


输出:

2

时间复杂度:O(n * n)

高效的方法:我们可以观察到:

odd ^ odd = even
odd ^ even = odd
even ^ odd = odd
even ^ even = even

因此,XOR为奇数的数组中的总对等于奇数计数乘以偶数计数。

C++

// C++ program to count pairs in array
// whose XOR is odd
#include 
using namespace std;
  
// A function will return number of pair
// whose XOR is odd
int countXorPair(int arr[], int n)
{
    // To store count of odd and even
    // numbers
    int odd = 0, even = 0;
  
    for (int i = 0; i < n; i++) {
        // Increase even if number is
        // even otherwise increase odd
        if (arr[i] % 2 == 0)
            even++;
        else
            odd++;
    }
  
    // Return number of pairs
    return odd * even;
}
  
// Driver program to test countXorPair()
int main()
{
    int arr[] = { 1, 2, 3 };
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << countXorPair(arr, n);
  
    return 0;
}

Java

// Java program to count pairs in array whose
// XOR is odd
  
public class CountXor {
    // A function will return number of pair
    // whose XOR is odd
    static int countXorPair(int arr[], int n)
    {
        // To store count of odd and even numbers
        int odd = 0, even = 0;
  
        for (int i = 0; i < n; i++) {
            // Increase even if number is
            // even otherwise increase odd
            if (arr[i] % 2 == 0)
                even++;
            else
                odd++;
        }
  
        // Return number of pairs
        return odd * even;
    }
  
    // Driver program to test countXorPair()
    public static void main(String[] args)
    {
        int arr[] = { 1, 2, 3 };
        System.out.println(countXorPair(arr, arr.length));
    }
}

的Python 3

# Python 3 program to count 
# pairs in array whose XOR is odd
  
# A function will
# return number of pair
# whose XOR is odd
def countXorPair(arr, n):
  
    # To store count of 
    # odd and even numbers
    odd = 0
    even = 0
  
    for i in range(n):
          
        # Increase even if number is
        # even otherwise increase odd
        if arr[i] % 2 == 0:
            even += 1
        else:
            odd += 1
  
    # Return number of pairs
    return odd * even
  
# Driver Code
if __name__ == "__main__":
    arr = [ 1, 2, 3 ]
    n = len(arr)
    print(countXorPair(arr, n))
  
# This code is contributed 
# by ChitraNayal

C#

// C# program to count pairs in
// array whose XOR is odd
using System;
  
public class CountXor {
      
    // A function will return number of pair
    // whose XOR is odd
    static int countXorPair(int[] arr, int n)
    {
        // To store count of odd and even numbers
        int odd = 0, even = 0;
  
        for (int i = 0; i < n; i++) {
              
            // Increase even if number is
            // even otherwise increase odd
            if (arr[i] % 2 == 0)
                even++;
            else
                odd++;
        }
  
        // Return number of pairs
        return odd * even;
    }
  
    // Driver program to test countXorPair()
    public static void Main()
    {
        int[] arr = {1, 2, 3};
        Console.WriteLine(countXorPair(arr, arr.Length));
    }
}
  
// This code is contributed by vt_m.

的PHP


输出 :

2

时间复杂度: O(n)