题目描述
给定一个数组,除了一个数出现1次之外,其余数都出现3次。找出出现一次的数。
如:{1, 2, 1, 2, 1, 2, 7},找出7。
输入描述
第一行输入一个数 n,代表数组的长度,接下来一行输入 n 个整数表示数组A[n]。
输出描述
最后输出只出现一次的数。
题目分析
用一个32位的数组来统计所有元素各位上 1 出现的个数,如果某一位上为1且该整数出现了三次,对3去余为0,我们把每个数的对应位都加起来对3取余,最终剩下来的那个数就是单独的数字。
输入样例
4 0 0 0 5
输出样例
5
测试代码
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int get_SignalNum(int *arr, int n) 5 { 6 int i, j, res = 0, sum; 7 for(i = 0; i < 32; i++) 8 { 9 sum = 0; 10 for(j = 0; j < n; j++) 11 { 12 sum += (arr[j] >> i) & 1; 13 } 14 res |= (sum % 3) << i; 15 } 16 return res; 17 } 18 19 int main(void) 20 { 21 int n, i, *arr; 22 23 scanf("%d", &n); 24 arr = (int *)malloc(n * sizeof(int)); 25 for(i = 0; i < n; i++) 26 { 27 scanf("%d", arr + i); 28 } 29 printf("%d\n", get_SignalNum(arr, n)); 30 31 free(arr); 32 return 0; 33 }