解题:奇偶数乘法问题

解题:2代表偶数(包括0),1代表奇数,求解。

小学四年级,对,你没有看错。

群里面都在讨论,这个没有正确答案。我掐指一算,题目有陷阱,那就是第一个偶数,也可能是0,得出结果:

65 - 79
85 - 39
87 - 59
over!

 

def jo(x,y:str):
    #x是要判断的数据,y是奇数,偶数的序列。比如奇偶奇=101
    x=str(x)
    if len(x)<len(y):
        x=x.zfill(len(y))
    elif len(x)>len(y):
        return False
    y0=''
    for i in x:
        if int(i)%2==0:
            y0+='0'
        else:
            y0+='1'
    return y0==y

#print(jo(1234,'101'))

for x in range(1,1000,2):
    for y in range(11,100,2):
        h1=x*int(str(y)[1]) #第一行计算结果
        h2=x*int(str(y)[0]) #第二行计算结果
        h3=x*y #第三行计算结果
        if jo(x,'001') and jo(y,'11') and jo(h1,'0101') and jo(h2,'011') and jo(h3,'1111'):
            print(x,'-',y)
            break
else:
    print('over!')

重构: 

这个代码还可以优化,在x里面,可以先进行x值的判断:

if not jo(x,'001'):

    continue

这样的话,就省去后面的计算了。

另外在if循环中,所有的判断都写到了同一行,这些计算都要执行完毕,对计算速度有影响,解决办法就是分开来写。

 

 

#coding='utf-8'
#by 小罗QQ1271801445
#解题:2代表偶数(包括0),1代表奇数,求解。
##   2  2  1
##*     1  1
##——————
##2  1  2  1
##2  1  1
##——————
##1  1  1  1

#解题思路:特别注意,首位也可能是0!

def jo(x,y:str):
    #x是要判断的数据,y是奇数,偶数的序列。比如奇偶奇=101
    x=str(x)
    if len(x)<len(y):
        x=x.zfill(len(y))
    elif len(x)>len(y):
        return False
    y0=''
    for i in x:
        if int(i)%2==0:
            y0+='0'
        else:
            y0+='1'
    return y0==y

#print(jo(1234,'101'))

for x in range(1,1000,2):
    if not jo(x,'001'):#先行判断,减掉不符合条件的分枝,可提高计算速度。
        continue
    for y in range(11,100,2):
        if not jo(y,'11'):
            continue
        h1=x*int(str(y)[1]) #第一行计算结果
        h2=x*int(str(y)[0]) #第二行计算结果
        h3=x*y #第三行计算结果
        if jo(h1,'0101') and jo(h2,'011') and jo(h3,'1111'):
            print(x,'-',y)
            break
else:
    print('over!')

 

posted on 2017-12-31 23:57  guangzhao17  阅读(635)  评论(0编辑  收藏  举报