Python编程之算法练习_003

Posted orcsir

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python编程之算法练习_003相关的知识,希望对你有一定的参考价值。

题目:给定两个32位整数a和b,返回a和b中较大的。要求:不用任何比较判断。

不写原理,直接上推导图表:

技术分享图片

 

代码:

 

# 不用任何比较判断找出两个数中较大的数
import random

def 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 False

nCount = 0
maxValue = 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 += 1
else:
    print("Success.")

 

以上是关于Python编程之算法练习_003的主要内容,如果未能解决你的问题,请参考以下文章

Python编程之算法练习_002

Python编程之数据结构与算法练习_007

Python编程之数据结构与算法练习_009

Python编程之数据结构与算法练习_010

Python编程之基础知识练习_007

Python编程之基础知识练习_004