[九度oj]题目1351:数组中只出现一次的数字

来源:互联网 发布:sql in和not in的用法 编辑:程序博客网 时间:2024/05/21 23:34
题目描述:
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
输入:
每个测试案例包括两行:
第一行包含一个整数n,表示数组大小。2<=n <= 10^6。
第二行包含n个整数,表示数组元素,元素均为int。
输出:
对应每个测试案例,输出数组中只出现一次的两个数。输出的数字从小到大的顺序。
样例输入:
82 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;  }


0 0
原创粉丝点击