题目:
有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
for num in range(6,58):
a = num >> 4 & 3
b = num >> 2 & 3
c = num & 3
if( (a^b) and (b^c) and (c^a) ):
print a+1,b+1,c+1
解释:
最小的数是123最大的数是432
二进制里面 :
00 01 10分别可以表示0 1 2
11 10 01分别可以表示3 2 1
合起来看 :
00 01 10是6
11 10 01是57
3的二进制表示是 :
11
如果两个数做异或运算等于0,例如 a^b 等于 0 ,则a和b一定相等;
程序的意思是:
如果两两分割的这3组数,分别代表 百 、 十 、个,那么右移4位与3再加1得到百位,右移2位
与3再加1得到十位,右移0位与3再加1得到个位,其中要剔除重复的(用异或运算剔除);