配列に1回しか現れない問題(異種または問題)
3099 ワード
#include
void FindNumsAppearOnce(int (&a)[6])
{
// , ,
int value = 0;
int num1,num2; //
int flag = 1; // flag
for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++)
{
value ^= a[i];
}
num1 = num2 = value; //
while ((value & flag) == 0)
{
flag <<= 1; // 1,1
}
for (int j = 0; j < sizeof(a) / sizeof(a[0]); j++)
{
if ((flag & a[j]) == 0)
{
num1 ^= a[j];
}
else {
num2 ^= a[j];
}
}
std::cout << " :" << "
" << "num1 = " <" num2 = "<< num2;
}
int main(void)
{
int a[6] = { 2,4,5,2,5,6 };
FindNumsAppearOnce(a);
getchar();
return 0;
}