Python編程之演算法練習_003

來源:互聯網
上載者:User

標籤:演算法   分享圖片   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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.