Stick

算法描述:奇数个正整数,每次都可以任意取出两个相等的数,求最后剩余的数是多少?

                 eg: 5,9,5,10,10 最后剩余的数是9


^表示亦或运算,例如:1^1=0,0^0=0,1^0=1,0^1=1

即两个相同的数亦或^得0,0与其余的数亦或得那个数本身,C语言在计算机中采用补码表示,这里都是正整数,原码补码一样,例如5=0101(前面的0就省略了,比如32机器中int应该占32位),9=1001

            0101  =5

xor       1001  =9                                       0101

——————                                           1001

            1100  =12           ======》          0101

xor       0101  =5                                  ——————

___________                                           1001  =9

            1001  =9

可以看出只要存在两个相等的数,就会亦或出0,然后再与另外的数亦或,即为最后剩余的数。








你可能感兴趣的:(算法)