Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [javascript] wszystkie możliwe sumy
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
kurkusmaximus
Mam tablicę z ileś tam liczbami, np: 2, 465, 22, 35.86, 23.84, 1000
Muszę wypisać wszystkie możliwe sumy uzyskane przez dodanie n liczby elementów z tablicy.
Macie na to jakiś pomysł?
flashdev
http://pl.wikipedia.org/wiki/Wariacja_bez_powtórzeń

To jest to czego szukasz. Wystarczy znaleźć odpowiedni kod w interneci i przerobić tak, aby elementy zbioru były sumowane.
kurkusmaximus
Dzięki @flashdev, a teraz inna sprawa.

Mam "worek" z liczbami. Jak znaleźć składniki, które po dodaniu dadzą określoną sumę.
Np: w worku mam 100, 500, 400, 250, 700; użytkownik chce znaleźć składniki, które dadzą sumę 1000.
wszerad
Kod
var tablica = [100, 500, 400, 250, 700];
tablica = tablica.sort;
for(i=0;i<tablica.length;i++){
    for(j=1+i;j<tablica.length;j++){
        if(tablica[i]+tablica[j]==1000){
            alert('x='+tablica[i]+'y='+tablica[j]);
        }
    }
}

Tu masz dla sumy dwóch elementów jeżeli więcej to już trochę więcej myślenia.
flashdev
Cytat(wszerad @ 20.09.2010, 18:06:51 ) *


Ten kod nigdy się nie przyda, bo nie wiesz jak duża będzie tablica.

Tutaj z kolei przyda się wiedza o kombinacjach bez powtórzeń.
Przy długości tablicy równej "n" musisz wygenerować "n" tablic kombinacji, gdzie "i"-ta tablica zawiera kombinacje "i"-elementowe, ze zbioru "n"-elementowego.
Mając te tablice, a anajlepiej odrazu sumy poszczególnych elementów sprawdasz która suma równa jest sumie szukanej i do wyniku dopisujesz (push) odpowiednią tablicę.
wszerad
To zależy od ilości elementów tablicy, którą przecież trzeba i tak zdefiniować... Dzięki tablica.length pętla będzie się wykonywać przez wszystkie elementy. Chyba ,że tak jak napisałem wcześniej suma będzie nie tylko dwóch elementów.
kurkusmaximus
A więc popełniłem takie coś: Odwiedź moją stronę
Skrypt dobrze działa tylko do 4 podanych liczb...

---------------

Nie rozumiem Twojego wyjaśnienia problemu flashdev. wstydnis.gif
Tak wiem, wystawiam Twoją cierpliwość na próbę, ale czy możesz przedstawić gotową funkcję?
flashdev
Wytłumacze na przykadzie.

Dane:
tablica: [1, 2, 3, 4, 5, 6] (size = 6)
suma: 10

Szuakne: (array)wynik

teraz robisz petle po N od 1 do size (6)

oblicz wszystkie kombinacje bez powtorzen
przyklady:
Dla N = 1 wynikiem jest tablica jednoelementowych kombinacji:
[1, 2, 3, 4, 5, 6]
Dla N = 2 wynikiem jest tablica dwuelementowych kombinacji:
[[1, 2], [1, 3], ..., [1, 6], [2, 1], [2, 3], ..., [5, 6]];
przechodzisz w petli przez wszystkie el. tej tablicy i sprawdzasz:
jesli suma elementow podtablicy jest rowna szukanej sumie
array_push(wynik, tablica[i]); // dodajesz ta tablice do wyniku
end if
koniec petli

To by było na tyle. Mam andzieję, że rozwiałem Twoje wątpliwości co do algorytmu.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.