求數組中只出現一次的兩個數

#include<stdio.h>
#include<iostream>
using namespace std;
void getonce(int a[],int n){
    int result=0,count=1;
    for (int i = 0; i < n; i++){
        result ^= a[i];
    }
    if(result == 0){
        cout<<"數組裏沒有隻出現一次的元素"<<endl;
        return ;
    }
    cout<<"result="<<result<<endl; //測試所有的異或結果
    while(result != 0){
        if(result&&1==1)  //找出第一次出現1的位數
            break;
        else{
            result >>= 1; 
            count <<=1;
        }
    }
    cout<<"count="<<count<<endl;//測試從低位到高位第一次出現1的位數
    int first=0;
    int second=0;
    for (int j = 0; j < n; j++){
        if ((a[j]&count) == 0){
            first ^=a[j];
            cout<<"firstgroup="<<a[j]<<" "; //測試第一組的結果 
        }
        else{
            second ^=a[j];
            cout<<"secondgroup="<<a[j]<<" ";//測試第二組的結果
        }
    }
    cout<<endl;
    if(((first|0) != 0)&&(second|0 != 0)){
        cout<<"first="<<first<<endl;
        cout<<"second="<<second<<endl; 
        }
    else if((first|0) != 0){
        cout<<"數組只有一個元素不同"<<endl;
        cout<<first<<endl;
    }
    else{
        cout<<"數組只有一個元素不同"<<endl;
        cout<<second<<endl;
    }       
}

int main(){
    int a[]={23,23,23,78,23,78};
    int b[]={1,1,4,1,1,1};
    getonce(a,6);
    getonce(b,6); // 測試結構爲 1,4,不知道爲啥?歡迎指正。
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章