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放入函数中。比如让d = a [i]如果a [i]可以被所有其他整数整除。对于这个问题,答案是12,任何人都可以改变我的代码问题吗?谢谢!!
答案 0 :(得分:2)
简短的解决方案是
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
答案 1 :(得分:0)
我认为你正在寻找最不常见的多重算法,在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
答案 2 :(得分:0)
我已经花了我之前的评论。我们不需要实际计算任何倍数,因为我们预计它已经在列表中。诀窍就是采取最大值(如果允许负数则采用最小值),然后验证。
但首先,弄清楚你将如何处理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&lt; b,并假设a可被b整除。但是然后a%b == 0。因为a&lt; b,我们知道a%b是a。因此a = 0或a = nb(对于某些n)。但是&lt; b,因此a == 0。 (自己扩展为有符号整数。符号与确定可分性无关。)