#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;
}
求數組中只出現一次的兩個數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.