Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [javascript] wszystkie możliwe sumy
kurkusmaximus
post 19.09.2010, 21:48:53
Post #1





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 27.01.2010
Skąd: Sopot

Ostrzeżenie: (0%)
-----


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ł?
Go to the top of the page
+Quote Post
flashdev
post 19.09.2010, 22:11:30
Post #2





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


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.


--------------------
Go to the top of the page
+Quote Post
kurkusmaximus
post 20.09.2010, 16:05:47
Post #3





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 27.01.2010
Skąd: Sopot

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
wszerad
post 20.09.2010, 17:06:51
Post #4





Grupa: Zarejestrowani
Postów: 106
Pomógł: 18
Dołączył: 11.12.2008

Ostrzeżenie: (0%)
-----


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.

Ten post edytował wszerad 20.09.2010, 17:09:21
Go to the top of the page
+Quote Post
flashdev
post 20.09.2010, 17:57:51
Post #5





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


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ę.


--------------------
Go to the top of the page
+Quote Post
wszerad
post 21.09.2010, 17:58:55
Post #6





Grupa: Zarejestrowani
Postów: 106
Pomógł: 18
Dołączył: 11.12.2008

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
kurkusmaximus
post 23.09.2010, 18:10:39
Post #7





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 27.01.2010
Skąd: Sopot

Ostrzeżenie: (0%)
-----


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ę?
Go to the top of the page
+Quote Post
flashdev
post 23.09.2010, 18:37:54
Post #8





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


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.


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 27.04.2025 - 06:45