【C语言】给一组组数,只有两个数只出现了一次,其他所有数都是

//给组组数,只有两个数只出现了一次,其他所有数都是成对出现的,找出这两个数。#include <stdio.h>int find_one_pos(int num)//找一个为为1的位置{int n = 0;while(num){if (num & 1 == 1)break;else{n++;num >>= 1;}}return n;}void find_two_differ(int arr[], int len, int *num1, int *num2){int i = 0;int pos = 0;int ret = 0;*num1 = 0;*num2 = 0;for (i = 0; i < len; i++){ret ^= arr[i];}pos = find_one_pos(ret);for (i = 0; i < len; i++){if (arr[i] & (1 << pos))*num1 ^= arr[i];else*num2 ^= arr[i];}}int main(){int arr[] = { 1, 2, 3, 4, 5, 1, 2, 3 };int ret1 ;int ret2 ;find_two_differ(arr, sizeof(arr) / sizeof(arr[0]), &ret1, &ret2);printf("num1=%d\nnum2=%d\n", ret1, ret2);return 0;}

版权声明:本文为博主原创文章,,未经博主允许不得转载。

别想一下造出大海,必须先由小河川开始。

【C语言】给一组组数,只有两个数只出现了一次,其他所有数都是

相关文章:

你感兴趣的文章:

标签云: