0
点赞
收藏
分享

微信扫一扫

算法题(消失的数字)

  • 数组nums包含从0到n的所有整数,但是其中缺失了一个,请编写代码找出那一个缺失的整数。

解题思路:使用异或操作

异或运算的性质:

0^n=n //0和任何数异或仍然是任何数
0^0=0 //0和0异或任然是0
a^a=0 //任何数和自己本身异或仍然是自己本身
a^b=b^a //异或操作满足交换律
a^b^c=a^(b^c) //异或操作满足结合律
#include <stdio.h>
#define MAX 10
int MissNumber(int *nums,int size)
{
int x=0;
int i=0;
for(i=0;i<size;i++)
{
x^=nums[i];
}
for(i=0;i<size;i++)
{
x^=i;
}
return x;

}
int main()
{
int nums[MAX]={0};
int i=0;
int ch=0;
printf("Please input:\n");
while(1)
{

scanf("%d",&ch);
nums[i++]=ch;
if(i>=MAX)
break;
}
int size=sizeof(nums)/sizeof(nums[0]);
int c=MissNumber(nums,size);
printf("Missnumber is:%d\n",c);
return 0;
}

算法题(消失的数字)_消失的数字

假设输入:0 1 2 3 4 6 7 8 9 0 (数字可以不按顺序输入,异或满足交换律)   缺失的数字为 5

第一个for循环x=0^1^2^3^4^6^7^8^9^0

第二个for循环x=0^1^2^3^4^6^7^8^9^0^0^1^2^3^4^5^6^7^8^9

其中其他数字出现两次异或为0,剩下0和5异或为5,得出缺失的数字5

举报

相关推荐

0 条评论