Untitled
unknown
plain_text
2 years ago
2.1 kB
11
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