1. 程式人生 > >找出重複兩次的數--有且只有一個數字重複兩次,其餘都不重複

找出重複兩次的數--有且只有一個數字重複兩次,其餘都不重複

問題描述:數字範圍是0-99的整數,給出101個整數,其中只有一個是重複兩次的數,找出這個數
分析:如果是有序的話,遍歷一次就可以找出

方法一
:先排序,再遍歷,遍歷超過一次

方法二
:只是排序,排序過程中對於元素相等這一特殊情況拿出來判斷,直接返回相等的這個元素,

方法三
:使用亦或運算子 ^ ,這個也是剛瞭解到的,遍歷一次 
相同數字 亦或一次 結果是 0 
不同數異或一次,結果是 1 (二進位制按位亦或) 
異或:先將資料轉為二進位制數,然後進行按位異或

比如數字 1^3 
十進位制 1 對應二進位制 0001 
3 對應二進位制 0011 
異或結果:2 <———— 0010 
表面上看來就是:相同數字異或一次得0 ,再異或一次該數字得到 該數字 
1^1^1=0^1=1

回到這個問題: 
不難發現 0^1^2^3……^100=100 (這裡一共101個數字,異或了100次) 
如果沒有重複(加粗是上一等式括號的結果) 
=(1^2)^3……^100 
=(3^3)^4^5………^100 
=(0^4)^5^6……^100 
=(4^5)^6^7……^100

……………… 
=100 
假設重複數字位k, 
那麼 (0^1^2^……^100)^100=0 
0^k=k 
即 (0^1^2^……^100)^100^k=k; 
注意:異或的結果是與順序無關的

程式碼實現:
 

int findrep(int a[])
{
	int temp=0;
	for(int i=0;i<101;i++)
	{
		temp=temp^a[i];
	}
	return temp^100;
}

原文作者:https://blog.csdn.net/qq_36922927/article/details/80753400