【C/C++】位运算之找出独苗

来源:互联网 发布:java 什么是存储过程 编辑:程序博客网 时间:2024/06/01 18:43

一、问题描述

一组数据中只有一个数字出现了一次。
其他所有数字都是成对出现的。请找出这个数字。(使用位运算)

二、问题分析

定义一个变量ck并初始化为0

从数组的第一个元素开始判断

若ck第 i-1 位(从右向左)是0,那么置一

否则置0

全部判断完后,检测ck的那些位是1

这些1的 位+1 便是独苗的数字 

 

三、代码实现

#include<stdio.h>int* check(int arr[]){int *parr = arr;int ck = 0;int i = 0; while(*arr){if(0 == (ck<<arr[i]))//判断这个二进制数的第i位是否为0 ck|=(1<<arr[i]-1);//是的话,置1elseck^=(1<<arr[i]-1);//否则,置0arr++;}for(i = 0; i<32 ; i++){if(((ck>>i)&1)==1)printf("%d ",i+1);if((ck>>i)==0)break;}return parr;}int main(){int arr[10] = {0};int i = 0;printf("请输入九个正整数:>");for(i = 0;i<9;i++){ scanf("%d",&arr[i]);}check(arr);return 0;} 


 

1 0
原创粉丝点击