標籤:演算法 分享圖片 false 分享 導圖 print 正確方法 bubuko com
題目:給定兩個32位整數a和b,返回a和b中較大的。要求:不用任何比較判斷。
不寫原理,直接上推導圖表:
代碼:
# 不用任何比較判斷找出兩個數中較大的數import randomdef flip(x): return x^1#待測試方法def binCompare(x,y): z = x - y sigX = flip((x>>31)&1) sigY = flip((y>>31)&1) sigZ = flip(((z>>31)&1)) sigXYSam = flip(sigX^sigY) sigXYDiff = sigX^sigY func = sigXYSam*sigZ + sigXYDiff*sigX return func*x + flip(func)*y#常規正確方法def normalMethod(x,y): return max(x,y)#對數器def Compare(x,y): return True if x == y else FalsenCount = 0maxValue = 1000000 #一百萬次while nCount <= maxValue: x = random.randint(-1000000, 1000000) #正負一百萬之間的隨機數 y = random.randint(-1000000, 1000000) binFunResult = binCompare(x,y) normalFunResult = normalMethod(x,y) if not Compare(binFunResult, normalFunResult): print("Fucked.") print("Sample:({},{})".format(x,y)) break nCount += 1else: print("Success.")
Python編程之演算法練習_003