一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。请找出这个数字。

一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。请找出这个数字。

头文件以及主函数(测试):

#include<stdio.h>
#include<stdlib.h>

int main()
{
 int arr[] = { 4, 6, 4, 5, 5, 3, 6 };    //数组初始化,可自由赋值
 int len = sizeof(arr) / sizeof(arr[0]),c;     //求数组长度
 c = find_f(arr, len);        //函数调用
 if (c > len)             //判断返回值是否合法
  printf("这组数中没有单独的数\n");
 else
  printf("%d\n",arr[c]);        //合法即输出单独的数
 system("pause");
 return 0;
}


方法一:直接比较法(比较笨),每一个数都和其余的数比较,直到找出单独的

int find_f(int arr[], int len)      //寻找单独数
{
 int i, j, k;
 for (i = 0; i < len; i++)
 {
  k = 0;
  for (j = 0; j < len; j++)
  {
   if ((arr[i] & arr[j]) == arr[i])   //如果两数相同,k++
    k++;                          
  }
  if (k == 1) return (i);        //  如果(k=1),即本数组中只有自己一个,则返回此数的下标
 }
 return (len + 1);
}


方法二:按位异或,设处置为0;0异或任何数都为任何数;

int find_f(int arr[], int len)      //寻找单独数
{
	int temp = 0;
	for (int i = 0; i < len; i++)
	{
		temp = temp^arr[i]; //按位异或
	}
	for (int i = 0; i < len; i++)
	{
		if (temp == arr[i])
			return i;
	}
	return len+1;
}


本文只是在下在学习过程自己的想法,只能实现简单功能,可能还没考虑到程序的优化,与大神写出来的代码还有一定差距,如果那位大神发现了问题,请您不吝赐教,如果您还有更好的方法,不妨分享分享,谢谢!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章