題目:
給定一個數組,除了一個數出現1次之外,其余數都出現3次。找出出現一次的數。如:{1, 2, 1, 2, 1, 2, 7}, 找出7.
格式:
第一行輸入一個數n,代表數組的長度,接下來一行輸入數組A[n],(輸入的數組必須滿足問題描述的要求),最後輸出只出現一次的數。
要求:
你的算法只能是線性時間的復雜度,並且不能使用額外的空間哦~
樣例輸入
4
0 0 0 5
樣例輸出
5
源碼:
#include <stdio.h>
#include <math.h>
int main()
{
int a[] = {1,2,3,1,2,1,3,2,7,3};
int n = 10;
int res, i, j, m;
res = 0;
for(i = 0; i < 32; i++)//32是int的二進制位數
{
m = 0;
for(j = 0; j < n; j++)
{
if(a[j] % 2 == 1) m++;
a[j] = a[j] >> 1;
}
res += (m % 3) * pow(2, i);//3指其余數都出現3次
}
printf("%d", res);
}