一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。 找出这两个数字,编程实现。
#pragma warning(disable:4996)
# include <stdio.h>
void find( int * src,int x)
{
int *mark = src; //元素位置
int *set = src; // 浮动指针
int out = x;
int in = x;
while (out--) //外层元素循环
{
set = src;//浮动归位
in = x; //位次查询结束,循环次数初始化
while (in--) //内层浮标循环
{
if ((mark != set) && (0 == (*mark ^ *(set))))
//不和自己异或 且 异或结果为 0,则该元素出现两次 ,跳过
{
mark++;
break;
}
else //若异或不为0 ,浮动指针加一
{
set++;
}
}
if (0 > in) //当内部循环正常结束时,x次循环结束都没有找到出现两次的值,
//即 *mark 只出现了一次,此时,in--到了 -1,作为鉴别条件
{
printf("%d\n", *mark);
mark++; //继续查找下一个元素
}
}
}
int main()
{
int num[] = { 1, 2, 3, 4, 4,7, 1, 3, 2 ,8};
find(num,sizeof(num)/sizeof(num[0]));
return 0;
}