var datasets = [
{argv: [1,2,3], out: [1,1,3]},
{argv: [4,8,30], out: [4, 8, 32]},
{argv: [237,434,639], out: [160, 320, 640]},
{argv: [244,912,1220], out: [244, 976, 976]},
{argv: [2876,5740,8462], out: [2116, 4232, 8464]},
{argv: [5244,6577,8227], out: [1,2,2]},
]
var names = ['a', 'b', 'c'];
Dostáváme tři přirozená čísla 0 < a
< b
< c
< 1 000 000.
Našim úkolem je najít trojici čísel x
, y
, z
takových, že x
je dělitelem y
a to je dělitelem z
.
Konkrétně, máme najít nejbližší takovou trojici.
To znamená, součet abs(a - x) + abs(b - y) + abs(c - z)
má být co nejmenší.
m = 10
def main(a, b, c):
best = 3*m
result = None
for i in range(1,m):
for j in range(i, m):
for k in range(j, m):
if j % i == 0 and k % j == 0:
value = abs(a-i) + abs(b-j) + abs(c-k)
if value < best:
best = value
result = i, j, k
return result
Rada: projít cyklem čísla do milionu je reálné, ale udělat takové tři cykly v sobě už je spíš surreálné. Bude to chtít nějaký zlepšovák.
Druhá rada: myslím, že žádná velká matematická chytrost se na tohle aplikovat nedá.