#include<conio.h>
#include<stdio.h>
#include<iostream.h>
int main( )
{
int i;
//int a[] = {1,5,5,2,3,4,2,3,4,5};
int a[ ] = { 3 ,1 ,5 ,2 ,2 ,3 ,5 ,3 ,4 ,4 } ;
int n = sizeof ( a) / sizeof ( a[ 0 ] ) ;
int xor_val = a[ 0 ] ;
for ( i= 1 ; i< n; i++ )
xor_val^ = a[ i] ; //Find xor sum of all the values
int count = 0 ; //To find the rightmost i-th bit set in xor_val
int x = 0 ; int y = 0 ;
int xfreq = 0 ,yfreq = 0 ; //to store respective frequencies of x and y
//Find the i-th 1 bit (rightmost)
while ( ( xor_val & ( 1 << count) ) == 0 )
count++ ;
//Find the element with i-th bit = 0
for ( i= 0 ; i< n; i++ )
{
if ( ( a[ i] & ( 1 << count) ) == 0 ) //that is if the count-th bit is zero
x^ = a[ i] ; //find the xor sum of those values
}
//Find the element were i-th bit is set
for ( i= 0 ; i< n; i++ )
{
if ( ( a[ i] & ( 1 << count) ) ! = 0 ) //xor sum of the numbers whose i-th (= count ) bit is not set
y^ = a[ i] ;
}
//Now either of x or y is the desired number
for ( i= 0 ; i< n; i++ )
{
if ( a[ i] == x)
xfreq++ ;
else if ( a[ i] == y)
yfreq++ ;
}
xfreq > yfreq ? ( cout << "\n The number which repeats thrice = " << x) : ( cout << "\n The number which repeats thrice = " << y) ;
getch( ) ;
return 0 ;
}
I2luY2x1ZGU8Y29uaW8uaD4KI2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8aW9zdHJlYW0uaD4KaW50IG1haW4oKQp7CglpbnQgaTsKCS8vaW50IGFbXSA9IHsxLDUsNSwyLDMsNCwyLDMsNCw1fTsKCWludCBhW109ezMsMSw1LDIsMiwzLDUsMyw0LDR9OwoJaW50IG4gPSBzaXplb2YoYSkvc2l6ZW9mKGFbMF0pOwoJaW50IHhvcl92YWwgPSBhWzBdOwoJZm9yKGk9MTtpPG47aSsrKQoJeG9yX3ZhbF49YVtpXTsvL0ZpbmQgeG9yIHN1bSBvZiBhbGwgdGhlIHZhbHVlcwoJaW50IGNvdW50ID0gMDsgLy9UbyBmaW5kIHRoZSByaWdodG1vc3QgaS10aCBiaXQgc2V0IGluIHhvcl92YWwKCWludCB4ID0gMDtpbnQgeSA9IDA7CglpbnQgeGZyZXEgPSAwLHlmcmVxID0gMDsgLy90byBzdG9yZSByZXNwZWN0aXZlIGZyZXF1ZW5jaWVzIG9mIHggYW5kIHkgCgkvL0ZpbmQgdGhlIGktdGggMSBiaXQgKHJpZ2h0bW9zdCkKCXdoaWxlKCh4b3JfdmFsICYgKDE8PGNvdW50KSk9PTApCgljb3VudCsrOwoJCgkvL0ZpbmQgdGhlIGVsZW1lbnQgd2l0aCBpLXRoIGJpdCAgPSAwCgkKCWZvcihpPTA7aTxuO2krKykKCXsKCQlpZigoYVtpXSAmICgxPDwgY291bnQpKSA9PSAwKS8vdGhhdCAgaXMgaWYgdGhlIGNvdW50LXRoIGJpdCBpcyB6ZXJvCgkJeF49IGFbaV07IC8vZmluZCB0aGUgeG9yIHN1bSBvZiB0aG9zZSB2YWx1ZXMKCQkKCX0KCS8vRmluZCB0aGUgZWxlbWVudCB3ZXJlIGktdGggYml0IGlzIHNldAoJZm9yKGk9MDtpPG47aSsrKQoJewogICAgIGlmKChhW2ldICYgKDE8PGNvdW50KSkgIT0gMCkgLy94b3Igc3VtIG9mIHRoZSBudW1iZXJzIHdob3NlIGktdGggKD0gY291bnQgKSBiaXQgaXMgbm90IHNldCAKICAgICB5Xj1hW2ldOwogICB9CiAgIC8vTm93IGVpdGhlciBvZiB4IG9yIHkgaXMgdGhlIGRlc2lyZWQgbnVtYmVyIAogICAgIGZvcihpPTA7aTxuO2krKykKICAgICB7CiAgICAgICAgIGlmKGFbaV09PXgpCiAgICAgICAgIHhmcmVxKys7IAogICAgICAgIGVsc2UgaWYoYVtpXT09eSkKICAgICAgICAgeWZyZXErKzsKICAgICB9CiAgICAgeGZyZXEgPiB5ZnJlcSA/IChjb3V0PDwiXG5UaGUgbnVtYmVyIHdoaWNoIHJlcGVhdHMgdGhyaWNlID0gIjw8eCkgOihjb3V0PDwiXG5UaGUgbnVtYmVyIHdoaWNoIHJlcGVhdHMgdGhyaWNlID0gIjw8eSk7CgpnZXRjaCgpOwpyZXR1cm4gMDsKfQo=