一組數據中只有一個數字出現了一次。其他所有數字都是成對出現的。請找出這個數字。

一組數據中只有一個數字出現了一次。其他所有數字都是成對出現的。請找出這個數字。

頭文件以及主函數(測試):

#include<stdio.h>
#include<stdlib.h>

int main()
{
 int arr[] = { 4, 6, 4, 5, 5, 3, 6 };    //數組初始化,可自由賦值
 int len = sizeof(arr) / sizeof(arr[0]),c;     //求數組長度
 c = find_f(arr, len);        //函數調用
 if (c > len)             //判斷返回值是否合法
  printf("這組數中沒有單獨的數\n");
 else
  printf("%d\n",arr[c]);        //合法即輸出單獨的數
 system("pause");
 return 0;
}


方法一:直接比較法(比較笨),每一個數都和其餘的數比較,直到找出單獨的

int find_f(int arr[], int len)      //尋找單獨數
{
 int i, j, k;
 for (i = 0; i < len; i++)
 {
  k = 0;
  for (j = 0; j < len; j++)
  {
   if ((arr[i] & arr[j]) == arr[i])   //如果兩數相同,k++
    k++;                          
  }
  if (k == 1) return (i);        //  如果(k=1),即本數組中只有自己一個,則返回此數的下標
 }
 return (len + 1);
}


方法二:按位異或,設處置爲0;0異或任何數都爲任何數;

int find_f(int arr[], int len)      //尋找單獨數
{
	int temp = 0;
	for (int i = 0; i < len; i++)
	{
		temp = temp^arr[i]; //按位異或
	}
	for (int i = 0; i < len; i++)
	{
		if (temp == arr[i])
			return i;
	}
	return len+1;
}


本文只是在下在學習過程自己的想法,只能實現簡單功能,可能還沒考慮到程序的優化,與大神寫出來的代碼還有一定差距,如果那位大神發現了問題,請您不吝賜教,如果您還有更好的方法,不妨分享分享,謝謝!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章