LAMBRIDA wrote:Eg vil komme med ei oppgave som eg tror noen vil ha glede av å prøve seg på, men eg veit ikke hvor vanskelig den er.
Oppgaven
Finn seks forskjellige brøker med teller 1 og den største nevneren lavest mulig. Når hver brøk multipliseres med 60, så vil tre av de seks produktene være heltallige og summen av de seks produktene 67.
Hvilke seks brøker kan dette være?
Fin øving i programmering (Python) for meg dette her. Jeg er ganske uerfaren, så vennligst ikke mobb dersom koden ser elendig ut. Dersom noen har kommentarer om hvordan den kan effektiviseres ytterligere, tas det gjerne imot! Jeg tolker oppgaven dithen at vi ønsker at
minst 3 av produktene skal være heltall.
Code: Select all
import math
import time
start = time.time()
[a,b,c,d,e,f] = [1]*6
k=1
førsteløsning = False
svar1 = []
svar = []
m=0
while k>0:
if 60*(1/a + 1/b + 1/c + 1/d + 1/e + 1/f) == 67: # Sjekker betingelser
counter = 0
for i in [a,b,c,d,e,f]: # Neste betingelse
if 60/i == math.floor(60/i):
counter += 1
if counter >= 3 and len([a,b,c,d,e,f]) == len(set([a,b,c,d,e,f])): # Siste betingelser
svar1 = [a,b,c,d,e,f]
if førsteløsning == False:
m = max(svar1)
svar = svar1
førsteløsning = True
if max(svar1) < m:
m = max(svar1) # Ta kun vare på minste maksverdi funnet
svar = svar1
if førsteløsning == True and a > m: # Dersom a>m vil vi kun finne større maksverdier senere
break
f += 1 # Tell oppover
if f == 10*k:
f = 1
e += 1
if e == 10*k:
[e, f] = [1] * 2
d += 1
if d == 10*k:
[d, e, f] = [1] * 3
c += 1
if c == 10*k:
[c, d, e, f] = [1] * 4
b += 1
if b == 10*k:
[b, c, d, e, f] = [1]*5
a += 1
if a == 10*k:
k += 1
elapsed = (time.time() - start)
print("Den ønskede løsningen er 1/" + str(svar[0]) + ", 1/" + str(svar[1]) + ", 1/" + str(svar[2]) + ", 1/" + str(svar[3]) + ", 1/" + str(svar[4]) + " og " + "1/" + str(svar[5]) + ", funnet på " + str(elapsed) + " sekunder.")
som gir svaret:
Code: Select all
Den ønskede løsningen er 1/10, 1/2, 1/5, 1/6, 1/12 og 1/15, funnet på 46.237741231918335 sekunder.