-
题目描述:
- 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
-
输入:
-
每个测试案例包括两行:第一行包含一个整数n,表示数组大小。2<=n <= 10^6。第二行包含n个整数,表示数组元素,元素均为int。
-
输出:
- 对应每个测试案例,输出数组中只出现一次的两个数。输出的数字从小到大的顺序。
-
样例输入:
-
8 2 4 3 6 3 2 5 5
-
样例输出:
-
4 6
-
#include <iostream> #include <cstdio> using namespace std; int a[1000000]; unsigned int FindBit(int num) { int Bit = 0; while(((num&1) == 0)&&(Bit < 8*sizeof(int))) { num = num>>1; ++Bit; } return Bit; } bool IsBit1(int num,unsigned int Bit) { num = num>>Bit; return (num&1); } int main(int argc,char* argv[]) { int length; while(scanf("%d",&length) != EOF) { int index = 0; for(int i=0;i<length;++i) { scanf("%d",&a[i]); index ^= a[i]; } unsigned int Bit = FindBit(index); int num1 = 0,num2 = 0; for(int j=0;j<length;++j) { if(IsBit1(a[j],Bit)) num1 ^= a[j]; else num2 ^= a[j]; } if(num1 > num2) { int temp = num1; num1 = num2; num2 = temp; } cout<<num1<<" "<<num2<<endl; } return 0; }