Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  26 1653
Det begynte som en liten oppgave på skolen og nå har jeg irritert meg arg på dette. Noen som klarer å løse dette greit og elegant? Skal skrive et program som gjør jobben så det må være logikk i løsningen ikke bare ren try and fail.

Jeg har 10 forskjellige tall. 5 av disse tallene skal adderes altså legges sammen/plusses. De 5 tallene skal gi et spesielt svar. Eks.

Tallene er: 1, 2, 3, 4, 5, 6, 7, 8, 9,10
5 av disse skal adderes og gi svaret 21. 1+2+4+6+8 er da korrekt svar.

Men hvordan kan jeg finne fram til disse tallene på en logisk og systematisk måte?
Very Important Fabulist
aybara's Avatar
Det er jo flere løsninger enn den...
Nub!
TipeX's Avatar
Trådstarter
Har jeg sagt noe annet? Det jeg vil ha er en logisk måte å komme fram til en løsning
riktig, så jeg skjønner ikke at den er vanskelig, er bare tidkrevende slik jeg ser det nå
Nub!
TipeX's Avatar
Trådstarter
Er ikke noe vanskelig om du kan bruke hodet og anta sånn ca siffer. Men poenget er at du ikke får anta noe og må regne deg fram til svaret. Som sagt prøver jeg å lage et program for dette Men med andre tall og større utregninger, men prinsippet blir det samme.
Jeg vet ikke helt om jeg forstod det, men er det ikke ihvertfall systematisk med stigende partall ?
Hvordan vet du om tallet er spesielt? Hva er utgangspunktet?

Kunne du forklart denne litt nærmere kanskje....
Nub!
TipeX's Avatar
Trådstarter
Altså, tallet det skal bli når man adderer 5 siffre. I eksempelet mitt skal det bli 21.
Hvorfor kan du ikke bare la programmet prøve og feile?
Må det være 5 tall ?
Kan det ikke være at du bare bruker 3 eller 4 tall eller noe slikt ?
F.eks: 4+8+9 = 21
Nub!
TipeX's Avatar
Trådstarter
Må være 5 ja.

Zpeef: Fordi jeg vil ikke. Det tar tid. Å teste tallene med random sak vil f.eks. komme til å teste 5+5+5+5+2, 5+5+5+5+3, 5+5+5+5+2. Altså den vil prøve samme kombinasjon flere ganger som er helt meningsløst Jeg vil ha en rutine på det. Altså et system.
Her kommer du inn på rekketeorien.
Formlen for summen av en aritmetrisk rekke (rekke der vert ledd øker med et bestemt tall, addisjon) er s = (n*(a1 + an))/2. Altså antall ledd ganger det tallet du starter med + slutttallet dele på to.
Ved å snu å vende på denne formlen bor du komme komme frem.
E gjorde det også for deg:

x = (n/s*2)-a1
n er jo fast siden du skulle ha 5 ledd og a1 setter du også til et fast tall, samme hvilket.

Var det slik du ville ha det?
Nub!
TipeX's Avatar
Trådstarter
Nesten. Vet ikke om jeg forstå deg skikkelig. Jeg skal ha de 5 leddene. Og rekken er nødvendigvis ikke aritmetrisk. Jeg begynner å tro det ikke finnes noen måte å gjøre det på utenom prøv og feil.
vet ikke om e forsto hva du ikke skjønte men: (5/s*2)-a1 når du har fem ledd.

Hvordan tall er de fem tallene da? har de noen sammenheng eller skal de være helt tilfeldige? og hva skal de brukes til? Hvis de er geomertiske kan du bruke formlen for geometiske rekker..
Er ikke poenget med hele greia at han skal klare å finne de 5 tallene som kan gi resultatet 21? Jeg har ingen formening om hvordan dette kan gjøres. Går du på Ungdomsskole, Videregående eller Videre utdanning? Kanskje høre med en mattelærer om han har en formening om hvordan dette kan gjøres. Er som regel dem som har peiling på slikt
Nub!
TipeX's Avatar
Trådstarter
wwwking: Se eksempelet mitt. Tallene som skal adderes er det jeg vil finne. Altså de 5 tallene.
21-x-y-z-k-p= 0
altså 21-9-3-1-6-2=2
ta tallet som det skal være minus tallene som er gitt deg,
så får du lett det rette svaret.
Nub!
TipeX's Avatar
Trådstarter
Altså. Jeg har tallene 1-10 som da er 1,2,3,4,5,6,7,8,9,10. Fem av disse skal jeg addere for å få 21.
og du kan ikke bruke desimaltall? Hvis du må bruke hele tall fungerer ikke den formlen..

Vil alikevel mene at du kan bruke noe av det en lærerer om rekker..

La oss si at du får gjennomsnittet av 21, 21/5=4,2 og fordeler de fem tallene utifra gj.snittet? vet ikke helt hvordan formlen vil bli..
Nub!
TipeX's Avatar
Trådstarter
wwwking: jeg må bruke tallene 1,2,3,4,5,6,7,8,9,10. Men bare for dette eksempelet. Altså jeg skal da skrive et program for dette så for de med litt programmerings erfaring:

$mulige_tall = array(1,2,3,4,5,6,7,8,9,10);
$svar = 21;

Så skal jeg da ha 5 siffer fra $mulige_tall og addere de og da få $svar
Tror ikke jeg kan løse problemet ditt. men jeg har regnet feil lengre oppe. x = (s*2/n)-a1 skal det være.
Kan prøve å forklare en gang til så får du se om du kan bruke det:
Du har en tall rekke fra 1 til 10. La oss da si at a1 =1, da blir x det tallet denne rekken (med n ledd) slutter på når summen = s
I ditt tilfelle må du da fordele tallene jevnt fra a1 til x, ofte kan dette bli desimaltall. Siden det kan bli desimaltall med denne metoden regner e med at du ikke kan bruke dette Du kan jo også se om du greier å få fordelt tellene slik at de blir hele..
noen som prøver seg på å lage dette programmet? knoter litt i java nu... *hjernetrim*
Nub!
TipeX's Avatar
Trådstarter
Jeg driver selv i php. Men det er litt slit med random når man venter på at siden skal komme opp og etter 30 eller so timeoutes det. :/ Derfor jeg leter etter en logisk måte som er kjappere enn random. Orker ikke innstallere vb.
Nå har jeg funnet en løsning på dette, men jeg er ikke ferdig med å progge den. (Prøver å gjøre det i PHP, men er helt ny \ blank, så det går litt seint ).

Jeg poster likevel prinsippet her nå først (NB: Godt mulig det er litt uklart, dette, eller at det er enkelte tilfeller der det ikke funker, eller er buggy - Det er m.a.o. bare en uferdig idè):

Oppgaven er å plukke ut 5 tall av 10 bestemte tall for å få en bestemt sum, og hvert tall kan bare brukes en gang, slik eg har forstått det. Da må \ kan progget gjøre følgende:

1) Ta det høyeste tallet i rekken. (10 i eksempelet)
2) Lagre tallet 10 i en variabel, eller rekke (e.l.)
3) Trekk det fra svaret (21) og få resten (11).
4) Ta det nest-høyeste tallet (9) og trekk dette fra resten (11) og få den nye resten (2). (finner ett passende tall med if-else-struktur)

Nå har du funnet tre tall blandt de 10 som har summen 21 (Rekke#1: 2, 9, 10). Du skulle imidlertid ha 5 tall, og det kan du gjøre slik:

5) Ta det øverste tallet av de du har funnet (10) (vi skal prøve å dele det opp i flere deler slik at vi får 5 tall til sammen)
6) Ta det første tallet under dette som ikke er brukt (8) og finn resten til ti (2). 2 er brukt, så progget går videre til 7,
som gir resten 3. (vi har nå tallene 2, 3, 7 og 9).
7) Nå har progget en ny rekke (rekke#2: 2, 3, 7, 9) og begynner å dele opp på samme måte her, det største tallet først. Tallet under
9 er 8. 9-8=1 i rest, altså 1, 2, 3, 7, 8. Summen her er 21, og vi har altså en løsning.

Dersom progget ikke hadde funnet løsningen her så fort kunne det gått videre og prøvd å dele opp de neste tallene (nest størst, tredje størst, osv)
i hver rekke. Om det ikke fant en løsning da heller kunne det gått helt tilbake til den første rekken igjen og prøvd neste mulige oppdeling
av det største tallet (10). Altså, i stedet for: 10=7+3 og deretter 9=1+8 (1, 2, 3, 7, 8), så: 10=6+4 (2, 4, 6, 9) og deretter 9=8+1 (1, 2, 4, 6, 8; TipeX sin egen løsning).

Jeg er ikke sikker på om alle løsninger blir funnet på denne måten, så det er usikkert om den funker i alle tilfeller, men her funker den i alle fall fint. Nå gjenstår det bare å få det kodet og kjørbart...
Sist endret av Psy_Illusion; 22. oktober 2002 kl. 17:16.
Nub!
TipeX's Avatar
Trådstarter
Mjo. Skal vel gå det i teorien. Men du vil vel få en del problemer når tallene endres. For det er ikke bestemt at tallene man kan bruke er 1-10. De kan lett være 1000, 225, 324, 23, 74, 65, etc.. Og svaret skal f.eks. bli 1430.
Forbetingelsene må være at du vet at det faktisk finnes ett svar, og tallene må stilles opp i riktig rekkefølge. Likevel vil metoden sansynligvis slå feil i en del tilfeller, men du får bygge videre på den! Tror ikke det skal være så enormt vanskelig å lage dette, bare litt tidkrevende. Bare progget begynner "øverst" og går systematisk gjennom tallene så skal det kunne finne svaret etter en liten stund. Det blir på en måte en slags systematisert gjetting, men det er i alle fall mye bedre og raskere enn en random() funksjon som setter sammen tallene. Det tror jeg kan komme til å ta enormt lang tid.
Nub!
TipeX's Avatar
Trådstarter
Ja. Det er den eneste konklusjonen jeg har. Random() styr VIL ta tid. Lang tid.