题目概述
输入5个数,其中2个数出现2次,1个数是出现1次,找出出现1次的那个数,例如输入的是8 5 3 5 8,输出的值为3
输入:
8 5 3 5 8
输出:
3
思路分析:
主要考查的是位运算当中的异或操作。
异或的运算规则为: :0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0
(两数相同结果为0,两数相异结果为1)
因此我们可以利用这个特性来找出只出现过一次的数字。因为数字出现两次以上的通过异或运算之后都会变成0的~
当然了, 此题也可以新建个表来存储每个数字出现的次数, 然后取出只出现一次的数字即可~
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct table {
int len;
ElemType *data;
}Stable; // 可变长度的数组
// 目的: 找出只出现过一次的数字
int main()
{
Stable S;
S.len = 5;
S.data = (ElemType*)malloc(sizeof(ElemType) * S.len);
for (int i = 0; i < S.len; i++) {
scanf("%d", &S.data[i]);
}
int result=0;
for (int j = 0; j < S.len; j++) {
result = result ^ S.data[j];// 使用异或操作, 二进制对应位若相同则结果为0,不同为1
}
printf("%d", result);
system("pause");
return 0;
}
欢迎大家的观看,如果有什么疑问或者高见,麻烦各位在下方的留言区发表你的评论,感谢大家的观看与支持~~