import java.util.Scanner;
public class code06 {
/*
題目描述: 兩種數出現奇數次 其他數出現偶數次 求這兩個數
0^n=n n^n=0
兩個數 怎麼辦
思路:
兩個數異或後的數a^b=eor一定不為0 找到eor的最右邊的1
将一個數eor'把它最右邊的數設為1其他為設為0 那麼用eor'來和數組中的數相與
雖然有偶數但是偶數的次數會互相抵消 隻剩下a和b其中一個
然後再用eor異或a或者b都可以得到另外一個
* */
public static void printOddTimesNum2(int[] arr) {
int eor = 0;
for (int i = 0; i < arr.length; i++) {
eor ^= arr[i];
}
// a 和 b是兩種數
// eor != 0
// eor最右側的1,提取出來
// eor : 00110010110111000
// rightOne :00000000000001000
int rightOne = eor & (-eor); // 提取出最右的1
int onlyOne = 0; // eor'
for (int i = 0 ; i < arr.length;i++) {
// arr[1] = 111100011110000
// rightOne= 000000000010000
if ((arr[i] & rightOne) != 0) {
onlyOne ^= arr[i];
}
}
//異或後的onlyone則必定會a或者b其中一個
System.out.println(onlyOne + " " + (eor ^ onlyOne));
}
public static void main(String[] args) {
System.out.println("請輸入:");
Scanner sc = new Scanner(System.in);
String str=sc.nextLine().toString();
//數字之間用空格隔開
String[] arr=str.split(" ");
int[] b=new int[arr.length];
//輸出
for (int j=0;j<b.length;j++){
b[j]=Integer.parseInt(arr[j]);
// System.out.println(b[j]);
}
printOddTimesNum2(b);
}
}
新建立一個公衆号 Rockey小何同學 想互相交流的同學可以關注一下哈! 感謝支援!