zoukankan      html  css  js  c++  java
  • 找出两个只出现了一次的数字(利用异或)

     题目描述:

    一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。

    输入:

    输入的第一行包括一个整数N(1<=N<=1000)。
    接下来的一行包括N个整数。

    输出:

    可能有多组测试数据,对于每组数据,
    找出这个数组中的两个只出现了一次的数字。
    输出的数字的顺序为从小到大。

    样例输入:
    6
    2 3 9 3 7 2 
    样例输出:
    7 9

    Code:
    #include <cstdio>
    #include <algorithm>
    #include <vector>
     
    using namespace std;
     
    int main()
    {
        int arr[1010];
        int n;
        vector<int> answer;
        while(scanf("%d",&n)!=EOF){
            answer.clear();
            for(int i=0;i<n;++i){
                scanf("%d",&arr[i]);
            }
            sort(arr,arr+n);
            if(arr[0]^arr[1])
                answer.push_back(arr[0]);
            if(arr[n-1]^arr[n-2])
                answer.push_back(arr[n-1]);
            if(answer.size()==2){
               sort(answer.begin(),answer.end());
               printf("%d %d
    ",answer[0],answer[1]);
            }else{
                for(int i=1;i<=n-2;++i){
                    if(arr[i]^arr[i-1]&&arr[i]^arr[i+1])
                        answer.push_back(arr[i]);
                    if(answer.size()==2)
                        break;
                }
                sort(answer.begin(),answer.end());
                printf("%d %d
    ",answer[0],answer[1]);
            }
        }
        return 0;
    }
     
    /**************************************************************
        Problem: 1256
        User: lcyvino
        Language: C++
        Result: Accepted
        Time:760 ms
        Memory:1024 kb
    ****************************************************************/
  • 相关阅读:
    POJ 3279 Fliptile 枚举+搜索
    POJ 3278 Catch That Cow
    CS Academy Round41 BFS+DFS
    CS Academy Round41 Tennis Tournament
    CS Academy Round41 Cinema Seats
    POJ 1177 Picture
    HDU 1255 覆盖的面积
    POJ 1151 Atlantis 线段树+离散化
    HDU 4614 Vases and Flowers 线段树+二分
    凑数问题
  • 原文地址:https://www.cnblogs.com/Murcielago/p/4208380.html
Copyright © 2011-2022 走看看