给定一个整数数组,任务是在对每个元素x进行x次异或运算后,计算所有数组元素的和。例如,如果元素是4,那么我们对这个数字进行4次异或,比如:=4^4^4^4 例如:
null
Input : arr[] = { 1, 2, 3, 5 }Output : 9 explanation: 1 + 2^2 + 3^3^3 + 5^5^5^5^5 : 9 Input : arr[] ={ 5, 6, 7, 9 }Output : 21
A. 简单解决方案 就是一个接一个地选取每个数组元素,并根据其值对其自身进行异或运算。最后将XOR值添加到结果中。 下面是上述想法的实现。
C++
// C++ program to compute sum of all element after // doing Xor with itself ( element_time) #include <bits/stdc++.h> using namespace std; // function return sum of all XOR element of array int XorSum( int arr[], int n) { // store result int result = 0; // Traverse array element and apply XOR // operation on it for ( int i = 0; i < n; i++) { // XOR of current element with itself // according to value. int k = 0; for ( int j = 1; j <= arr[i]; j++) k ^= arr[i]; result += k; } return result; } // Driver program int main() { int arr[] = { 1, 2, 6, 3, 4, 5 }; int n = sizeof (arr) / sizeof (arr[0]); cout << XorSum(arr, n) << endl; return 0; } |
JAVA
// Java program to compute sum of all // element after doing Xor with itself // ( element_time) import java.io.*; class GFG { // function return sum of all XOR // element of array static int XorSum( int arr[], int n) { // store result int result = 0 ; // Traverse array element and apply // XOR operation on it for ( int i = 0 ; i < n; i++) { // XOR of current element with // itself according to value. int k = 0 ; for ( int j = 1 ; j <= arr[i]; j++) k ^= arr[i]; result += k; } return result; } // Driver program public static void main(String args[]) { int arr[] = { 1 , 2 , 6 , 3 , 4 , 5 }; int n = arr.length; System.out.println(XorSum(arr, n)); } } /*This code is contributed by Nikita Tiwari.*/ |
python
# Python 3 program to compute sum of # all element after doing Xor with # itself ( element_time) # function return sum of all XOR # element of array def XorSum(arr, n) : # store result result = 0 # Traverse array element and # apply XOR operation on it for i in range ( 0 , n) : # XOR of current element # with itself according to # value. k = 0 for j in range ( 1 , arr[i] + 1 ) : k = k ^ arr[i] result = result + k return result # Driver program arr = [ 1 , 2 , 6 , 3 , 4 , 5 ] n = len (arr) print (XorSum(arr, n)) # This code is contributed by Nikita Tiwari. |
C#
// C# program to compute sum of all // element after doing Xor with itself // ( element_time) using System; class GFG { // function return sum of all XOR // element of array static int XorSum( int []arr, int n) { // store result int result = 0; // Traverse array element and apply // XOR operation on it for ( int i = 0; i < n; i++) { // XOR of current element with // itself according to value. int k = 0; for ( int j = 1; j <= arr[i]; j++) k ^= arr[i]; result += k; } return result; } // Driver program public static void Main() { int []arr = { 1, 2, 6, 3, 4, 5 }; int n = arr.Length; Console.WriteLine(XorSum(arr, n)); } } // This code is contributed by vt_m. |
PHP
<?php // PHP program to compute // sum of all element after // doing Xor with itself // ( element_time) // function return sum of all // XOR element of array function XorSum( $arr , $n ) { // store result $result = 0; // Traverse array element // and apply XOR // operation on it for ( $i = 0; $i < $n ; $i ++) { // XOR of current element // with itself according // to value. $k = 0; for ( $j = 1; $j <= $arr [ $i ]; $j ++) $k ^= $arr [ $i ]; $result += $k ; } return $result ; } // Driver Code $arr = array (1, 2, 6, 3, 4, 5); $n = count ( $arr ); echo XorSum( $arr , $n ); // This code is contributed by anuj_67. ?> |
Javascript
<script> // Javascript program to compute sum of all element after // doing Xor with itself ( element_time) // function return sum of all XOR element of array function XorSum(arr, n) { // store result let result = 0; // Traverse array element and apply XOR // operation on it for (let i = 0; i < n; i++) { // XOR of current element with itself // according to value. let k = 0; for (let j = 1; j <= arr[i]; j++) k ^= arr[i]; result += k; } return result; } // Driver program let arr = [ 1, 2, 6, 3, 4, 5 ]; let n = arr.length; document.write(XorSum(arr, n)); </script> |
输出:
9
时间复杂度:O(n*m)(这里m是数组中的最大元素) 辅助空间:O(1) 有效解决方案 这个问题的基本原理是,如果我们对任何数字进行异或运算(偶数次),它会产生0,如果我们对奇数进行异或运算,它会产生相同的数。 例如
let number be : 3 do XOR with itself 3 time 3^3^3 = 3 let number be : 4 do XOR with itself 4 time 4^4^4^4 = 0 so if number is odd it's mean output is number itself. Else zero
以下是上述理念的实施:
C++
// C++ program to compute sum of all element after // doing XOR with itself ( element_time) #include <bits/stdc++.h> using namespace std; // function return sum of all XOR element of array int XorSum( int arr[], int n) { int result = 0; for ( int i = 0; i < n; i++) { // if number is odd then add it to the // result else not if (arr[i] % 2 != 0) result += arr[i]; } return result; } // Driver program int main() { int arr[] = { 1, 2, 6, 3, 4, 5 }; int n = sizeof (arr) / sizeof (arr[0]); cout << XorSum(arr, n) << endl; return 0; } |
JAVA
// Java program to compute sum of // all element after doing XOR // with itself ( element_time) class GFG { // function return sum of all // XOR element of array static int XorSum( int arr[], int n) { int result = 0 ; for ( int i = 0 ; i < n; i++) { // if number is odd then add it to the // result else not if (arr[i] % 2 != 0 ) result += arr[i]; } return result; } // Driver code public static void main(String[] args) { int arr[] = { 1 , 2 , 6 , 3 , 4 , 5 }; int n = arr.length; System.out.println(XorSum(arr, n)); } } // This code is contributed by Anant Agarwal. |
Python3
# Python program to compute # sum of all element after # doing XOR with itself # ( element_time) # function return sum of # all XOR element of array def XorSum(arr,n): result = 0 for i in range (n): # if number is odd then add it to the # result else not if (arr[i] % 2 ! = 0 ): result + = arr[i] return result # Driver program arr = [ 1 , 2 , 6 , 3 , 4 , 5 ] n = len (arr) print (XorSum(arr, n)) # This code is contributed # by Anant Agarwal. |
C#
// C# program to compute sum of // all element after doing XOR // with itself ( element_time) using System; class GFG { // function return sum of all // XOR element of array static int XorSum( int []arr, int n) { int result = 0; for ( int i = 0; i < n; i++) { // if number is odd then add it to the // result else not if (arr[i] % 2 != 0) result += arr[i]; } return result; } // Driver code public static void Main() { int []arr = {1, 2, 6, 3, 4, 5}; int n = arr.Length; Console.WriteLine(XorSum(arr, n)); } } // This code is contributed by vt_m. |
PHP
<?php // PHP program to compute // sum of all element after // doing XOR with itself // ( element_time) // function return sum of // all XOR element of array function XorSum( $arr , $n ) { $result = 0; for ( $i = 0; $i < $n ; $i ++) { // if number is odd // then add it to the // result else not if ( $arr [ $i ] % 2 != 0) $result += $arr [ $i ]; } return $result ; } // Driver Code $arr = array (1, 2, 6, 3, 4, 5); $n = count ( $arr ); echo XorSum( $arr , $n ); // This code is contributed by anuj_67. ?> |
Javascript
<script> // Javascript program to compute // sum of all element after // doing XOR with itself ( element_time) // function return sum of all XOR element of array function XorSum(arr, n) { let result = 0; for (let i = 0; i < n; i++) { // if number is odd then add it to the // result else not if (arr[i] % 2 != 0) result += arr[i]; } return result; } // Driver program let arr = [ 1, 2, 6, 3, 4, 5 ]; let n = arr.length; document.write(XorSum(arr, n)); </script> |
输出:
9
时间复杂度:O(n) 辅助空间:O(1) 本文由 库马尔 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 贡献极客。组织 或者把你的文章寄到contribute@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。 如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END