找出唯一成对的数(c语言)

题目:1-1000这1000个数放在含有1001个元素的数组中,只出现唯一的一个元素值重复,其它均出现一次。设计一个算法,将它找出来。(接下来的代码数据都是小范围的,只需修改即可)
三种方式:
1.先将这1001个数相加,然后减掉1-1000这1000个数的和,最后剩下来的就是出现重复的这个数。
2.另外开辟一个大小为1001的数组b,遍历原来的数组,原来数组中的数就是新的数组的下标,刚开始是设新的数组中所有的值为0,遇到一个数就将对应的数组b[i]加一操作,然而,一旦遇到重复数,这时的b[i]为2,可以利用这个特征找到重复数,即b[i]中的i。
在这里插入图片描述
在这里插入图片描述
3.使用异或来找出唯一成对的数。
异或的规则:
a^a=0;
a^0=a;
我们的思路是将这1001个数异或起来,然后再将该数与1-1000之间的数异或起来,这样两两配对的数异或为0,而重复数有三个,异或后最终结果是这个重复数。
在这里插入图片描述
说明:1.c语言中memset是在<memory.h>中的;
2.产生随机数需要rand,srand函数,如果你要随机生成一个在范围的数,宏观定义一个random(int number)函数,然后在main函数中直接调用。但是要想每次运行产生的结果不同,必须利用srand()设好随机种子(seed),通常可以利用time(0),但要加头文件<time.h>

猜你喜欢

转载自blog.csdn.net/weixin_43534549/article/details/87027889