求陣列中只出現一次的兩個數
阿新 • • 發佈:2019-02-03
#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;
}