本文主要是介绍找单身狗(C语言),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目叙述:
一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。
编写一个函数找出这两个只出现一次的数字。
例如:
数组的元素是:1,2,3,4,5,1,2,3,4,6
只有5和6只出现1次,要找出5和6.
方法一:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void Find(int* arr,size_t num)
{for (int i = 0; i < num; i++){int flag = 1;for (int j = 0; j < num; j++){if (j == i)continue;//跳过元素自己与自己比较if (arr[i] == arr[j]){flag = 0;break;}}if (1 == flag)printf("%d ", arr[i]);}
}
int main()
{int arr[] = { 1,2,3,4,5,1,2,3,4,6 };Find(arr, 10);return 0;
}
方法二:
void FindNum(int arr[], int n, int* pnum1, int* pnum2)
{//将两个数组异或,得到两个不同数字的异或结果//例如,5和6的结果int tmp = 0;for (int i = 0; i < n; i++){tmp ^= arr[i];}//找到tmp中二进制为1的某一位int k = 0;for (int i = 0; i < 32; i++){if (((tmp >> i) & 1) != 0){k = i;break;}}//遍历数组,把每一个数据第k位上是1的,分到一个组进行异或//最终的值存储到pnnum1或者pnum2中*pnum1 = *pnum2 = 0;for (int i = 0; i < n; i++){if (((arr[i] >> k) & 1) != 0){//第k位是1*pnum1 ^= arr[i];}else{*pnum2 ^= arr[i];}}}
这篇关于找单身狗(C语言)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!