Avatar billede hestetoften Nybegynder
16. marts 2005 - 22:05 Der er 12 kommentarer og
1 løsning

Find tal i Array

jeg har dette array som betrår af disse tal:
ArrTal(9,8,6,1,1,2,1,6,13);
og en varabel:
Fixed := 20;

hvordan gør jeg dette:

find frem til de tal fra ArrTal der tilsammen giver sum >= fixed, gem disse tal i en variabel, så resultatat giver noget lig dette:

res1 := (9,8,1)
res2 := (6,1,2,6)
res3 := (13)
tallene i ArrTal kan kun bruges 1 gang

håber at jeg har gjort mig forståelig
Avatar billede erikjacobsen Ekspert
16. marts 2005 - 22:27 #1
Nu har jeg ikke lige noget der ligner i Delphi/Pascal, men det minder om noget der skal løse med backtracking - har du hørt om det?
Avatar billede hestetoften Nybegynder
16. marts 2005 - 22:28 #2
BackTracking - Nej ..
Avatar billede erikjacobsen Ekspert
16. marts 2005 - 22:34 #3
Ok - er det en skoleopgave (ligner ...) eller noget du skal bruge i praksis? Og kan det passe at med de angivne tal giver det i hvert fald disse (alle summer til præcis 20):

SOLUTION: 9 8 1 1 1
SOLUTION: 9 8 1 2
SOLUTION: 9 8 1 2
SOLUTION: 9 8 2 1
SOLUTION: 9 6 1 1 2 1
SOLUTION: 9 1 1 2 1 6
SOLUTION: 8 6 6
Avatar billede erikjacobsen Ekspert
16. marts 2005 - 22:43 #4
Næh, det kan jo ikke passe. Det ligner mere et "pakke dimser i pakker af fast
størrelse"-problem.

Du må ikke overstige 20 enheder i hver pakke, men gerne komme så tæt på som muligt, så
antallet af pakker er mindst mulig.

Du mangler en "1" i dit eksempel, hvis det er korrekt.
Avatar billede hestetoften Nybegynder
16. marts 2005 - 22:44 #5
Det jeg er ved at lave er:

Der hentes en del mapper fra en bestemt sti.

I disse mapper er de nogle filer

disse mapper og underlæggende filer, skrives i grupper i 3-4 kolonner

jeg vil gerne at disse kolonner får en vis længde (fixed)

og at disse kolonner bliver så vidt muligt bliver lige lange.
Avatar billede hestetoften Nybegynder
16. marts 2005 - 22:45 #6
ArrTal() beskriver hvor mange filer der er i de pågældende mapper .
Avatar billede hestetoften Nybegynder
16. marts 2005 - 22:46 #7
Går i seng, kikker på det igen imorgen.
Avatar billede erikjacobsen Ekspert
16. marts 2005 - 22:54 #8
Ok, jeg er ikke helt sikker på jeg forstår. Er rækkefølgen i din udskrift så ligegyldig?

En metode, der giver et resultet, men ikke altid det optimale, er noget i retning af:

  1) Vi skal starte på en ny pakke
  2) Tag det største af de tilbageværende tal (er det større en pakken er det en fejl)
  3) Bliv ved med at tage det størst mulige tilbageværende tal, indtil der er ikke
    er flere muligheder. Det er så pakken.

Med (9,8,6,1,1,2,1,6,13) og max på 20 bliver det

  Pakke1: 13 6 1      Fordi 9 og 8 ikke kan bruges
  Pakke2: 9 8 2 1
  Pakke3: 6 1

Metoden giver ikke færrest mulige pakker, og sikrer heller ikke en jævn fordeling.
Hvis der er mange tal, vil det lang tid at opnå de sidste ting.
Avatar billede hestetoften Nybegynder
18. marts 2005 - 20:39 #9
Hvordan tages tallene forfra, så resultat bliver:

res1 := (9,8,1,1,1)=20
res2 := (6,2,6)=14
res3 := (13)=13
Avatar billede erikjacobsen Ekspert
18. marts 2005 - 20:41 #10
Hvorfor er det en bedre løsning?
Avatar billede hestetoften Nybegynder
18. marts 2005 - 20:44 #11
Det er det heller ikke !

Det resultat jeg søger, er et layout nogenlunde som oversigten her på eksperten
Avatar billede jimbo22 Nybegynder
29. marts 2005 - 16:11 #12
dit problem svarer til det klassiske "knapsack" problem, som kan løses ved at benytte en teknik kaldet dynamisk programmering. Hvis du stadig er interesseret kan jeg give dig en komplet løsning ....
Avatar billede hestetoften Nybegynder
14. januar 2006 - 07:47 #13
Lukker
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