解题:奇偶数乘法问题
解题: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!')