Gå til innhold

Project Euler hjelp og diskusjon


Anbefalte innlegg

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 av Snobjorn
Lenke til kommentar
Videoannonse
Annonse

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 av GeirGrusom
Lenke til kommentar

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 av SNIPPSAT
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...