![]() |
![]() ![]() |
![]() |
![]()
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ł? |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 812 Pomógł: 117 Dołączył: 2.12.2008 Ostrzeżenie: (10%) ![]() ![]() |
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. -------------------- |
|
|
![]()
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. |
|
|
![]()
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 |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 812 Pomógł: 117 Dołączył: 2.12.2008 Ostrzeżenie: (10%) ![]() ![]() |
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ę. -------------------- |
|
|
![]()
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.
|
|
|
![]()
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. ![]() Tak wiem, wystawiam Twoją cierpliwość na próbę, ale czy możesz przedstawić gotową funkcję? |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 812 Pomógł: 117 Dołączył: 2.12.2008 Ostrzeżenie: (10%) ![]() ![]() |
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. -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 27.04.2025 - 06:45 |