第一章 位运算
1. 判断奇数偶数
办法:运用&1
若带判断的数&1 == 1 ----------> 奇数
若带判断的数&1 == 0 ----------> 偶数
public class demo1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int p = sc.nextInt();
switch (p&1){
case 1 :
System.out.println(p + " 奇数");
break;
case 0:
System.out.println(p + " 偶数");
break;
}
}
}
2. 交换两个数
原理:若a ^ b = c,则c ^ b = a,c ^ a = b
public class demo2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
System.out.println("a : " + a + " b: " + b);
int c = a^b;
a = a^c;
b = b^c;
System.out.println("a : " + a + " b: " + b);
}
}
3.题1
原理: A^A = 0 A ^ 0 = A
public class demo3 {
public static void main(String[] args) {
int N = 11;
int [] arr = new int [N];
int number = 0;
for (int i = 0; i < arr.length-1 ; i++) {
arr[i] = i+1;
}
//最后一个数为随机数
arr[arr.length - 1] = (int)(Math.random()*N)+1;
//输出的最后生成的数组
for(int i : arr){
System.out.print(i+" ");
}
System.out.println("\n");
//进行的第一次累异或
for (int i = 0; i < arr.length ; i++) {
number ^= arr[i];
}
//进行第二次累异或
for (int i = 0; i < arr.length-1 ; i++) {
number ^= i+1;
}
//数组中输出重复的元素
System.out.println(number);
}
}
4.题2
原理同上
仅需要将所有的数组元素进行累异或
public class demo4 {
public static void main(String[] args) {
int N = 1999;
int [] arr = new int[N];
//生成数组
for (int i = 0; i < arr.length-1 ; i++) {
arr[i] = i+1;
}
for(int i = 0; i < arr.length-1 ; i+=2){
arr[i+1] = arr[i];
}
//给最后位置的元素进行赋值仅一次出现的数字
arr[arr.length-1] = (int)(Math.random()*N + N/2+1);
//输出所有的数组中的元素
for(int i : arr){
System.out.print(i +" ");
}
System.out.println("\n");
int number = 0;
for (int i = 0; i < arr.length ; i++) {
number ^= arr[i];
}
System.out.println(number);
}
}