Krankemot Skrevet 12. august 2011 Del Skrevet 12. august 2011 (endret) Project euler er en samling med matematikkprogrammeringsoppgaver. Hvis du lager en konto kan du registrere de oppgavene du har klart. Oppgavene strekker seg fra enkle nybegynner-oppgaver til mer kompliserte. Dette er en tråd for diskusjon og hjelp rundt disse utfordringene. www.projecteuler.net Jeg kan begynne med ett spørsmål: oppgave 2 Har følgende kode i Python x1=1 x2=2 xn=0 sum = 0 while 1==1: xn = x1+x2 x1 = x2 x2 = xn print x2 if xn >= 4000000: break if xn % 2 == 0: sum+= xn print sum Jeg får svar 4613730. Men dette er feil. Noen ide? Endret 12. august 2011 av Snobjorn Lenke til kommentar
GeirGrusom Skrevet 12. august 2011 Del Skrevet 12. august 2011 (endret) Du starter med feil utgangspunkt (det skal være 0 og 1, ikke 1 og 2) IEnumerable<int> Fibonacci(int cap) { int a = 0, b = 1; while(a + b < cap) { int v = a + b; yield return v; a = b; b = v; } } static void main() { var result = Fibonacci(4000000).Where(i => (i & 1) == 0).Sum(); } Endret 12. august 2011 av GeirGrusom Lenke til kommentar
Krankemot Skrevet 12. august 2011 Forfatter Del Skrevet 12. august 2011 Selvfølgelig, ble litt villedet av oppgaveteksten Takk! Lenke til kommentar
snippsat Skrevet 12. august 2011 Del Skrevet 12. august 2011 (endret) Det har vært en tråd om dette før,som du kan se på. Den store project euler tråden Noen punkter om koden. while 1==1 dette er ikke pent,bruk while True "sum = 0" sum er i bruk av python,ikke bruk key word som variable navn. >>> sum <built-in function sum> >>> l = [1,2,3] >>> sum(l) 6 >>> help(sum) Help on built-in function sum in module __builtin__: sum(...) sum(sequence[, start]) -> value Returns the sum of a sequence of numbers (NOT strings) plus the value of parameter 'start' (which defaults to 0). When the sequence is empty, returns start. xn = x1+x2 x1 = x2 x2 = xn I de fleste språk må man lage temp variabler som dette,i python trenger man ikke dette. Python lar deg gjør tuple packing og unpacking som dette. a, b = b, a+b I koden til Geir ser vi bruk sum og yield i C#. I python kan det se sånn ut. def fib(maxFibNumber): a, b = 0, 1 while a < maxFibNumber: if a % 2 == 0: yield a a, b = b, a + b print sum(i for i in fib(4000000)) #4613732 Funksjonen fib retunere et generator object som vi bruker som en iterator. Når alle par tall opp til 4000000 har blitt generert,bruker sum() til og få et resultat. Endret 12. august 2011 av SNIPPSAT Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå