一个数组中只有俩个数出现了一次,其他都是成对出现的

#include 
#include


int find_one_bit(int num)    //约定寻找二进制中的某一位为1的位
{
int bit = 0;
while (num)
{
if (num & 1 == 1)
return bit;
bit++;
num = num >> 1;
}
return -1;
}


void find_num(int arr[], int size, int *p1, int *p2)
{
int tmp = 0;
int i = 0;
int pos = 0;
for (i = 0; i < size; i++)
{
tmp ^= arr[i];    //tmp保存的最终结果为不同的两个数字异或的结果
}
pos = find_one_bit(tmp);
for (i = 0; i < size; i++)
{
if (1 & (arr[i] >> pos))  //约定二进制位中同一位置是否为1,用以分组数字,因为某一位为1时,由异或的结果可知必定一个数字该位为0,另一个为1。0(0==*p1)与任何数字异或仍为该数本身。 
*p1 ^= arr[i];
else
*p2 ^= arr[i];
}
}

//主函数
int main()
{
int arr[] = {1,2,3,4,5,1,2,6,3,4};
int size = sizeof(arr) / sizeof(arr[0]);
int num1 = 0;
int num2 = 0;
find_num(arr, size, &num1, &num2);  //num1,num2必须传进地址,否则只是修改了形参而并不影响主函数的值,num1,num2仍为初始化的0。
printf("%d %d\n", num1, num2);
system("pause");
return 0;
}

本文标题:一个数组中只有俩个数出现了一次,其他都是成对出现的
文章路径:http://hxwzsj.com/article/jhpdpc.html

其他资讯

Copyright © 2025 青羊区翔捷宏鑫字牌设计制作工作室(个体工商户) All Rights Reserved 蜀ICP备2025123194号-14
友情链接: 企业网站建设 成都品牌网站设计 成都网站建设公司 企业网站设计 品牌网站建设 成都网站设计 成都网站制作 成都网站建设 成都网站设计 高端网站设计 网站建设公司 成都网站建设 网站制作公司 成都网站设计 成都网站建设 营销型网站建设 手机网站制作 响应式网站建设 H5网站制作 四川成都网站建设 定制级高端网站建设 温江网站设计