Untitled
unknown
plain_text
2 years ago
2.1 kB
15
Indexable
def tvennekannor(a, b, c, visa_steg=True):
def euclids_algorithm(a, b):
while b != 0:
a, b = b, a % b
return a
def extended_gcd(a, b):
if b == 0:
return a, 1, 0
else:
d, x, y = extended_gcd(b, a % b)
return d, y, x - (a // b) * y
def find_solution(a, b, c):
d = euclids_algorithm(a, b)
if c % d != 0:
return None
else:
x0, y0 = extended_gcd(a, b)[1:]
factor = c // d
return (x0 * factor, y0 * factor)
if not (0 <= c <= max(a, b) and c % euclids_algorithm(a, b) == 0):
print("Det går inte att mäta upp", c, "liter med tillgängliga bägare.")
return []
A, B = a, 0
steg = 0
if visa_steg:
print(f"Fyll A. (A, B) = ({A}, {B})")
while B != c:
if A == 0:
A = a
if visa_steg:
print(f"Fyll A. (A, B) = ({A}, {B})")
steg += 1
if B == b:
B = 0
if visa_steg:
print(f"Töm B. (A, B) = ({A}, {B})")
steg += 1
häll_mängd = min(A, b - B)
A -= häll_mängd
B += häll_mängd
if visa_steg:
print(f"Häll över från A till B. (A, B) = ({A}, {B})")
steg += 1
if B == c:
break
if visa_steg:
print("Önskad volym i bägare A.")
print("Antal steg:", steg)
solution = find_solution(a, -b, c)
if solution:
x, y = solution
if visa_steg:
print(f"En lösning på den diofantiska ekvationen\n{a}x - {b}y = {c}\när (x, y) = ({x}, {y}).")
return [steg, x, y]
else:
return []
# Användarinput
#Ange volymen av bägare A
a = 10782
#Ange volymen av bägare B
b = 4321
#Ange önskad volym
c = 6091
#b = 2114 fungerar inte,b = 4321 fungera men exceedar max output limit, b = 6885 fungerar inte
resultat = tvennekannor(a, b, c)
print(resultat)Editor is loading...
Leave a Comment