C语言:找出只出现一次的数

目录

1.问题

2.循环实现

3.异或实现


1.问题

问题:给定一个非空整型数组,除了某个元素出现一次外,其余每个元素均出现两次,找出只出现了一次的元素

例如:int a[] = {1,2,3,4,5,1,2,3,4};

a的整型数组中,只有5是出现了一次,其余的数字都是成双出现的。目标,找出5

2.循环实现

实现思路:通过循环,将数组的每个元素遍历,然后判断元素是否只是出现了一次

#define _CRT_SECURE_NO_WARNINGS 1
#include 

int main()
{
	int a[] = { 1,2,3,4,5,1,2,3,4 };

	int i = 0;
	int sz = sizeof(a) / sizeof(a[0]);   //数组大小

	for (i = 0; i < sz; i++)	//循环数组每个元素
	{
		int count = 0;				//计数变量
		int j = 0;
		for (j = 0; j < sz; j++)		//循环数组每个元素
		{
			if (a[i] == a[j])		//当元素相同的时候,count++
				count++;			//因为两次都是从a[0]遍历,所以count最少为1
		}
		if (count == 1)				//当数组某个元素单独出现,打印出来
			printf("%d\n", a[i]);
	}

	return 0;
}




C语言:找出只出现一次的数_第1张图片

 在判断出的时候,应该break跳出循环,本代码没有跳出

这是一种暴力求解思路,如果数组元素够多的话,代码还需要优化

3.异或实现

之前交换两个数字的实现中,可以知道异或的两个特性

  • 0^a=a
  • a^a=0

如果将数组的每一个元素都异或的话,相同的元素会异或成0,而单独的数字会和0异或成自身,那么就可以找到这个单独的数字

#define _CRT_SECURE_NO_WARNINGS 1
#include 

int main()
{
	int a[] = { 1,2,3,4,5,1,2,3,4 };

	int i = 0;
	int sz = sizeof(a) / sizeof(a[0]);   //数组大小
	int ret = 0;

	for (i = 0; i < sz; i++)	//循环数组每个元素
	{
		ret ^= a[i];    //异或每一个元素
	}
	printf("%d\n", ret);
	return 0;
}




C语言:找出只出现一次的数_第2张图片

你可能感兴趣的:(【C语言习题】,开发语言,c语言,visual,studio)