【C语言---17】找出一个数组中单独出现的两个数字

思路分析:

这是一种比较麻烦的方法,用冒泡排序的方法先把数组弄成有序,然后两两比较,不同的就是只出现了一次
优点是:不使用位运算
缺点是 :实在太麻烦

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

void swap(int* x, int* y)
{
	 int tmp;
	 tmp = *x;
	 *x = *y;
	 *y = tmp;
}

void sort(int arr[], int size)
{
	 for (int i = 0; i < size; ++i)//这个循环用来遍历
	 {
		  for (int j = 0; j<size-1-i; ++j)//用来比较相邻元素的大小,i之前的已经排好,只需排后面的元素
		  {
			   if (arr[j] >arr[j + 1]) 
			   {
				    swap(&arr[j + 1], &arr[j]);
			   }
		  }
	 }
}

void find(int arr[], int size,int *num1,int * num2)//比较相邻的排好序的两个元素,如果不同就是只出现一次
{
	 int tmp = 0;
	 for (int i = 0; i < size; i += 2)//一次找两个元素比较
	 {
		  if (arr[i] == arr[i + 1])
		  {
			   continue;
		  }
		  else
		  {
			   if (tmp==0)
			   {
				    *num1 = arr[i];
				    ++i;
			   }
			   else if (tmp==1)
			   {
				    *num2 = arr[i];
				    ++i;
			   }
			   tmp++; //把第一次找出的数字赋值给num1,第二次找到的赋值给num2
		  }
	 }
}

int main()
{
	 int arr[10] = { 1, 3, 9, 3, 2, 5, 8, 8, 9, 1 };
	 int size = sizeof(arr) / sizeof(arr[0]);
	 sort(arr, 10);
	 for (int i = 0; i < size; ++i)
	 {
		  printf("%d ", arr[i]);
	 }
	 int num1, num2 = 0;
	 find(arr, 10, &num1, &num2);
	 printf("  %d %d", num1, num2);
	 system("pause");
	 return 0;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值