Har en uppgift som går ut på att skriva ett program som printar tal i nummerserien 1 1 2 4 7 13 24 44... Har försökt med olika loopar men inget vill sej riktigt, så jag är tacksam för lite tips. Vet att detta är grundläggande saker inom programmering, men kommer tusan inte på hur det skall göras :( För det första bör du ju ha klart för dig vad nummerserien kommer ifrån. Genom att kolla på http://www.research.att.com/~njas/sequences/?q=1+1+2+4+7+13+24+44&sort=0&fmt=0&language=english&go=Search, så har du ju ett par uppslag, där "tribonacci" verkar rimlig. Ca en kvart efter inlägget löste jag det. Vet inte om koden är speciellt bra men den funkar... Vad gör loopen? Ööh, vet inte... Fick rätt svar iaf :) nu är den säkert något resurssnålare. Tack! Tja, så mycket svårare är det ju inte; något i stil med: Har deadline om några timmar och behöver hjälp med ännu en: 1 3 4 6 14 9 37 12. Tror jag vet hur den funkar: jämna positioners tal är summan av tidigare, udda är multipler av tre. Tusan de ska va svårt att få det till kod :( Hjälp uppskattas mycket! Ta det i steg; Du ska ha summan av alla hittils?Nummerserie
Sv: Nummerserie
Sen är det väl inte speciellt svårt; en loop som ackumulerar T(n-2) till T(n), och sen använder dem...?Sv:Nummerserie
static int series(int n) {
if (n == 1) return 1;
for (int i = 1; i < n; i++) {
return series(n-1)+series(n-2)+series(n-3);
}
return 0;
}
kommentera den gärna.
Sv: Nummerserie
<code=java>
int series(int n) {
if (n <= 1) return 1;
return series(n-1) + series(n-2) + series(n-3);
}
</code>
Annars är det väl en korrekt implementation.
Om man vill snabba upp koden kan man ta bort rekursionen men det är nog överkurs.Sv:Nummerserie
Sv:Nummerserie
int series(int n)
{
int j=0, k=1, l=1, m;
for(int i=2; i<n; i++){
m=j+k+l;
j=k;
k=l;
l=m;
}
return l;
}
Sv:Nummerserie
Sv: Nummerserie
1. Hur kan man skilja varannan gång åt? Kanske hålla reda på om "nuvarande" är jämn eller udda? Eller ta både udda och jämna på en gång, och hoppa två steg istället?
2. Hur räknar du ut de udda?
3. Hur räknar du ut de jämna?Sv:Nummerserie
int sum = 1, cnt = 1;
for (int i = 0; i < 15; i++) {
if ((i%2) != 0) {
//udda
out.printf("%d ", 3*cnt++); // skriv ut multipler av 3
} else {
//jämn
}
}
så långt har jag kommit. Har total hjärnsläpp
Sv: Nummerserie
Då finns det väl rimligtvis två sätt att lösa det; antingen får du spara summan av alla utom senaste, eller så får du spara alla tidigare på något sätt. Det sistnämnda kan du ev. göra med rekursiva anrop (även om det förmodligen är det krångligaste och mest tidskrävande sättet).
Bestäm dig för ett av sätten, och tänk sen hur du implementerar det.