在此给定范围内的数字异或程序中,我无法理解它们如何找到数字异或的算法。如果有人解释该算法如何查找范围内的异或值,那将是非常好的
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/*This program is used to find the xor of numbers within the range
u can enter multiple inputs.Here first enter the numbers of inputs u want to enter then in the next line enter the starting and ending range of the xoring
numbers with space
for example :
Input :
1
2 3
output:
odd
output displays whether the xor value within the given range is odd r not
*/
class XORNEY {
public static void main(String[] args) throws IOException {
BufferedReader kb = new BufferedReader(new InputStreamReader(System.in));
int testCases = Integer.parseInt(kb.readLine());
StringBuilder output = new StringBuilder();
while (testCases-- > 0) {
//here without declaring the array dynamically how they are storing all the inputs
String[] input = kb.readLine().trim().split(" ");
long L = Long.parseLong(input[0]);
long H = Long.parseLong(input[1]);
//i am more confused here abt why they are doing this
long count = (H - L) / 2;
if ((L & 1) == 1 || (H & 1) == 1) count++;
output.append((count & 1) == 1 ? "Odd\n" : "Even\n");
}
System.out.print(output);
}
}
答案 0 :(得分:1)
此处未动态声明数组的存储方式 所有输入
他们只是存储每个测试用例行而不是所有输入。每行包含两个用空格隔开的数字,如果用空格将其分开,则会在数组上获得两个数字。
我在这里更困惑他们为什么这么做
我可以提出一些想法-
在一定范围内的数字上,您将获得以0和1序列交替结尾的二进制数字。例如-
对于每对0, 1
,XOR
将为1。现在,您需要弄清楚是偶数对还是奇数对。偶数对将产生1到XOR的偶数,并给您一个以0
结尾的值,这意味着最终的XOR
值是一个even
数字。而odd
相反。
如果范围中的元素数为偶数,则可以肯定有几对(0, 1)
。但是,如果很奇怪,则根据多余的项目0/1
,您需要对计算进行调整。