一組數據中只有一個數字出現了一次。其他所有數字都是成對出現的。請找出這個數字。
頭文件以及主函數(測試):
#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; }
本文只是在下在學習過程自己的想法,只能實現簡單功能,可能還沒考慮到程序的優化,與大神寫出來的代碼還有一定差距,如果那位大神發現了問題,請您不吝賜教,如果您還有更好的方法,不妨分享分享,謝謝!