给定一个由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)