有一组数字,有两个数字只出现一次,其他数字都是成对出现的,请找出这个数字

(一)思考思路

一组数据中只有一个数字出现了一次

数据:arr[]={1 ,3 ,5 ,8,7, 1, 3, 5}这组数据中,只有7 , 8出现了一次。

1:对于这样的一个数组,我们应该使用函数调用的办法来实现,使得整个程序清晰可见

2:要找出这样的数,其实我们可以用传址的方式来检验相同性,即数组中第 i 个数据与第 i +1 ,i+2 , i+3....i+n-1元素进行比对,每次遇到相同元素(arr[ i ] == arr[ j ]),我们可以将第 i+1 元素和第 j元素进行换位,例如

                          1 3  5  8 7  1  3  5  

第一次换位        1 1  5  8 7  3  3  5

          ...........

       对于这样的换位,实际上在循环中每一次 i 的变换只需要 i =i+ 2就可以了,这样就可以跳过想通元素,但是会出现问题                  

       对于任意给定的数 key =7,它的放置位置不一样导致的结果会出现一定的问题,例如

               1 1  5   5  8 7  3  3

       当程序运行到这里,针对 8 对 后面的元素(7 , 3 ,3)进行判断,那么没有一个元素与它相等 ,那么这个数就是我们想要的,那么就输出这个数并且数组进行下一个元素的比较

(二)代码实现

<span style="font-size:24px;">#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
void Check_difnum(int arr[8] , int n)
{
     int i = 0;
	 int j = 0;
	 for(i=0; i<n; )
	 {
		 int key = 0;
		 for(j=i+1;j<n;j++)
		 {
		       if(arr[i] == arr[j])
			   {
                                 int temp = arr[j];
			         arr[j] = arr[i+1];
				 arr[i+1] = temp ;
				 key = 1;
				 i = i+2;
				 break;
			   }
		 }
		 if(key == 0)
		 {
                    printf("%d\n",arr[i]);
                    i = i+1;
		 }
	 }

}
int main()
{
	int arr[8]={1,2,3,5,8,3,2,1};
	printf("不同的数字为:\n");
    Check_difnum(arr , sizeof(arr)/sizeof(arr[0]));
    system("pause");
	return 0;
}</span>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值