一個數組中只有兩個數字是出現一次,其他所有數字都出現了兩次。 找出這兩個數字,程式設計實現。
阿新 • • 發佈:2019-02-16
# include <stdio.h>
# include <windows.h>
void find_once(int arr[], int len)
{
int i = 0;
int j = 0;
for (i = 0; i < len; i++)
{
int k = 0;
for (j = 0; j < len; j++)
{
if (arr[j] == arr[i])
{
k++;
}
}
if (k == 1)
{
printf("重複出現的數:>%d ", arr[i]);
}
}
printf("\n");
}
void find_once2(int arr[], int sz)
{
int ret = 0;
int inter = 0;
int retA = 0;
int retB = 0;
int i = 0;
for (i = 0; i < sz; i++)
{
ret ^= arr[i];
}
/*找ret最右邊的1*/
inter = ret - (ret&(ret - 1));
for (i = 0; i < sz; i++)
{
int a = (arr[i] >> (inter - 1)) % 2; //取出arr[i]的第inter位
if (a == 0)
{
retA ^= arr[i];
}
else
{
retB ^= arr[i];
}
}
printf("出現奇數次的兩個數為:> %d,%d\n" , retA, retB);
}
int main()
{
int arr[] = { 1, 2, 2, 1, 3, 4, 5, 5, 4 , 6, 7, 7 };
int sz = sizeof(arr) / sizeof(arr[0]);
find_once1(arr, sz);
find_once2(arr, sz);
system("pause");
return 0;
}