Avatar billede phpbegynder2004 Nybegynder
15. april 2008 - 18:59 Der er 18 kommentarer og
1 løsning

Matematisk skattejagt

Hej,

Jeg er i gang med at lave en lille matematisk skattejagt. En af delen går ud på, at programmere sig frem til et (stort) tal.
Jeg ville vise opgaven til jer, og hvilket resultat I får når i løser den (hvis nu jeg har lavet en fejl - det er lidt vigtigt at jeg har regnet rigtigt :) )

Anden feedback er også meget velkommen :)

----Opgaven lyder----

Vi opstiller følgende udtryk:
A+B+C+D+E+F+G=res

Samtlige variabler starter på 0, men stiger herefter forskelligt.
A stiger med kvadrattallene (1,4,9,16...).
B stiger med 2*A+1 (1. række: B=2*1+1=3).
C stiger med (a+b) mod 3 (1. række: C=(1+3) mod 3 = 1).
D stiger med (sumtallet af A + sumtallet af B). Sumtallet for 14 er 5 (1+4), og sumtallet for 46 er 10.
E stiger med (c mod 2)!, hvor ! er fakultet og mod er modulo.
F stiger med det C'ne Fibonacci-tal (1,1,2,3,5...). Således, at hvis C=4, så er F=3.
G indeholder den forrige rækkes res (bemærk, at i modsætning til alle de andre variabler, bliver res ikke akkumuleret).
res er svaret for en række. Således er res=11 for række 1 og 388 for række 4 .

De første 4 rækker forløber således:
1. 1+3+1+4+1+1+0=11
2. 5+14+2+14+2+1+11=49
3. 14+43+2+26+3+1+60=149
4. 30+104+4+34+4+3+209=388

Opgave
Find res for række 100 :)
Avatar billede arne_v Ekspert
15. april 2008 - 19:25 #1
Der er nok noget galt med definitionen paa E da (x mod 2)! er 1 for alle x ...
Avatar billede arne_v Ekspert
15. april 2008 - 19:50 #2
Jeg mener at du har regnet F forkert fra raekke 2 til 3.

Og teksten skriver du at G indeholder forrige res, men i eksempel ligger du res til G.
Avatar billede arne_v Ekspert
15. april 2008 - 19:52 #3
Hvis du kan beskrive helt praecist hvad du vil have udregnet, saa kan
vi nok ogsaa lave en udregning.
Avatar billede roenving Novice
16. april 2008 - 00:44 #4
Hvis vi gætter på, at beregningen i F er en heltalsdivision og ikke modulus, kan det vel findes ...

-- og det er lidt forvirrende, at du skriver at res ikke akkumuleres, men du viser i dit eksempel, at det gør det netop ...

-- og dine beregninger viser ikke at alle talrækker indeholder akkumulation ...

-- så: arne_v 15/04-2008 19:52:33 !-)

1. 1+3+1+4+1+1+0=11
2. 5+14+1+14+2+2+11=49 //allerede her får jeg, som du ser, noget andet ...
Avatar billede phpbegynder2004 Nybegynder
16. april 2008 - 00:52 #5
Ups. Det har I helt ret i.
Nu har jeg rettet G, således at den ikke akkumuleres. Var en ændring i teksten, som jeg glemte at ændre i koden :)
Modulusfejlen er fjollet i E, så vi laver den om til: E stiger med (c mod 5)!

Det skulle give dette:
1. 1+3+1+4+1+1+0=11
2. 5+14+2+14+3+1+11=50
3. 14+43+2+26+5+1+50=141
4. 30+104+4+34+29+3+141=345
Avatar billede arne_v Ekspert
16. april 2008 - 02:58 #6
F er stadig forkert

1 1 1 3

lyder ikke som om der ligges fibonacci tal til
Avatar billede phpbegynder2004 Nybegynder
17. april 2008 - 00:09 #7
F skulle nu være god nok.
Den stiger med det C'ne Fibonacci-tal. Ved ikke om det er for dumt, men ville bare give den et ekstra lille twist.
For de første fire rækker er c={1,2,2,4}

Denne del er især møntet på en af mine venner der nægter at lære php og sværger til matlab. Håber ikke denne kan løses (let) med matlab...

Det virker lidt fjollet, at jeg ikke selv kan se de fejl der er, men stirrer mig bare helt blindt på det. Også selvom jeg løser det manuelt :0
Så tak for hjælpen :)
Avatar billede arne_v Ekspert
17. april 2008 - 00:58 #8
din F er  1 1 1 3

C er 1 2 2 4

fib(C) er 1 1 1 3

F skal så være 1 2 3 6
Avatar billede nielle Nybegynder
17. april 2008 - 10:05 #9
> Håber ikke denne kan løses (let) med matlab...

Gætter på at den er lætter at løse med Matlab end med PHP. :^)
Avatar billede arne_v Ekspert
17. april 2008 - 15:35 #10
Jeg vil tro at det kan løses ca. lige så nemt i stort set alle sprog.

Matlab har sikkert fakultet og fibonacci predefineret og sparer et par linier der, men
de er jo ikke svære at kode.

Opgaven skal bare være 112% veldefineret.
Avatar billede nielle Nybegynder
17. april 2008 - 17:19 #11
Problemet er bare at løsningen formentlig vil involvere meget store tal - der hvor int64 er stået af.
Avatar billede arne_v Ekspert
17. april 2008 - 17:56 #12
god pointe

hvis F stiger med fib(C) er svaret så vidt jeg kan regne meig frem til 599812369297426
og det kan ikke være i en 32 bit integer
Avatar billede pidgeot Nybegynder
17. april 2008 - 18:07 #13
Arne, jeg får et lidt andet resultat end dig - 599.812.369.296.499 - men nej, det kan stadig ikke være i 32-bit integer. Jeg kan ikke huske hvordan PHP klarer at gå over til float/double, men det burde den så kunne bruge i stedet.

(For sjovs skyld: Programkode (Delphi) og output på http://birdiesoft.dk/exp827965.txt - ville ikke lige kopiere det herind)
Avatar billede arne_v Ekspert
17. april 2008 - 18:29 #14
Forskellen på vores beregninger er at din fakultet funktion beregner 0! som 0 mens min
bergner den som 1 !
Avatar billede pidgeot Nybegynder
17. april 2008 - 18:52 #15
Åh ja, rigtigt - det gik vist lidt for hurtigt med at få det skrevet *-)
Avatar billede phpbegynder2004 Nybegynder
17. maj 2008 - 18:22 #16
Lægger i lige point?
Avatar billede arne_v Ekspert
17. maj 2008 - 20:23 #17
svar
Avatar billede phpbegynder2004 Nybegynder
18. maj 2008 - 00:38 #18
Det var et svar jeg efterlyste, ja :)
Tak for hjælpen!
Avatar billede nielle Nybegynder
18. maj 2008 - 08:17 #19
Det kunne være sjovt at høre lidt om hvordan udfordringen så gik?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester