def divisible(a):
d = 0
n = len(a)
i = 0
p = 0
while d == 0 and p < n and i < n:
if a[i] % a[p] != 0:
i = i + 1
p = 0
else:
p = p + 1
return d
a = [12, 4, 6]
r = divisible(a)
print(r)有谁能帮帮我吗?它是python 3.0 +。我不能解决这个问题,我不知道我可以把d放到函数的什么地方。例如,如果ai可以被所有其他整数整除,则设d= ai。这个问题的答案是12,有人能改进我的代码吗?谢谢你!!
发布于 2016-08-09 22:45:15
一个简短的解决方案是
def divisible(a):
for i in a:
if all(i%j==0 for j in a):
return i
return None或者更长一点
def divisible(a):
for i in a:
found=True
for j in a:
if i%j: # everything that is not 0 is true
found=False
break
if found:
return i
return None发布于 2016-08-09 22:45:46
我认为你正在寻找最不常见的乘法算法,在python3中你可以这样编写它:
from fractions import gcd
from functools import reduce
def lcm(*args):
return reduce(lambda a, b: a * b // gcd(a, b), args)
print lcm(4, 6, 12)但似乎你不能在你的算法中使用任何函数,也不能使用python内置运算符,因为这是出于教育目的。那么一种可能的简单解决方案可能是这样的:
def divisible(input_list):
result = None
if 0 in input_list:
return result
for i in input_list:
ok = True
for j in input_list:
if i!=j and i % j != 0:
ok = False
break
if ok:
return i
return result发布于 2016-08-09 23:14:31
我已经详述了我之前的评论。我们实际上不需要计算任何倍数,因为我们期望它已经在列表中。诀窍就是取最大值(如果允许负数,则取最小值),然后进行验证。
但首先,弄清楚你将如何处理0。它可以被所有其他整数整除,并且本身不能除以任何整数,所以在本例中我只返回0。
如果你确定没有正确的答案,也要决定你会怎么做。我返回了None,但根据应用程序的不同,异常可能更合适。
def divisible(input_list):
# what to do with zero?
if 0 in input_list:
return 0
# get largest magnitude
candidate = max(map(abs, input_list))
# validate
if all([0 == candidate % x for x in input_list]):
return candidate
else:
# handle the case where there is no valid answer
return None
print divisible([12, 4, 6])
print divisible([-12, 4, 6, -3])
print divisible([12, 5, 7])
print divisible([12, 0, 4])这与janbrohl的答案有一些相似之处,但这是一个O(n**2)解决方案,对每个数字进行检查。但我们知道我们想要的数字将是最大的(在数量上)。
矛盾证明:取两个正数a,b,其中a< b,假设a可被b整除,但a%b == 0。由于a < b,我们知道a%b是a。因此a=0或a=nb (对于某些n)。但是a< b,因此是a==0。(自己扩展到带符号的整数。该符号在很大程度上与确定可分性无关。)
https://stackoverflow.com/questions/38853789
复制相似问题