![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 84 Pomógł: 0 Dołączył: 6.01.2008 Skąd: Działoszyn Ostrzeżenie: (0%) ![]() ![]() |
witam, mam ciekawy problem, szukałem na forum ale nic nie moglem znaleźć (IMG:style_emoticons/default/sad.gif)
a więc tak: mam pewną ilość liczb w bazie danych np. 1346 1650 5645 3643 2346 7554 3457 765 skrypt ma za zadanie sumować pokolei liczby do momentu aż wynik wyniesie np. 1000 lub 2000 lub 3000 aż do 10000, gdy wynik będzie większy niż 10000 to wtedy zaczyna sumować liczy od początku tylko że od następnej liczby czyli jak mamy 1346+1650=2996 1346+1650+5645=8641 1346+1650+5645+3643=12284 i zaczyna od nowa ale już od liczby 1650 1650+5645=7295 itd... aż do momentu gdy suma licz będzie równa 1000 lub jego wielokrotności to wtedy zacznie znowu od następnej liczby ew. może też być suma każdej liczby z każdą napisałem coś w podobnego ale mój skrypt ma wiele wad
|
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Zyx... Albo ja już jestem 100 lat za murzynami, albo właśnie się dowiedziałem, że każdy fragment kodu w PHP domyślnie działa wielowątkowo i można sobie odpalać thread w dowolnym miejscu, nawet bez deklaracji tego, a interpreter sam sobie zgaduje kiedy należy to zrobić (IMG:style_emoticons/default/winksmiley.jpg)
Jak na razie to kod wykonuje się sekwencyjnie i tak też będzie działał w tym wypadku, tak więc odpalanie masy instancji sum można sobie o kant d... roztrzasnąć (IMG:style_emoticons/default/winksmiley.jpg) Poza tym nic nam nie da wyświetlenie wyniku okna, skoro "gubimy" informację w tym samym momencie o tym jaki indeks był "startowym" dla ciągu danych by moc określić jakie elementy składały się na sumę dającą wielokrotność 1000. Musimy przynajmniej ten element (jego indeks) startowy oznaczyć lub gdzieś przechować, a unset nam go przecież usunie. Inna sprawa, że w przypadku ostatnich elementów tablicy brak "zawinięcia", przez co tracimy możliwość dodania do ostatnich elementów tych z początku tablicy by ewentualnie wyłapać krotność. Czyli dla pewności sum prędzej coś w deseń: Ogólnie pomysł z oknami jest dobry i mi samemu się podoba, tyle że bym dodał tablicę przechowującą index i sumę oraz "rollover". Może więcej ciut operacji, ale myślę, że to pewniejsze ciut. Inna sprawa, że tak naprawdę takimi działaniami tworzymy małą liczbę kombinacji spośród możliwych i mamy zbyt dużą szansę "przeoczyć" pasujące kombinacje. Prędzej powinno być "skakanie po węzłach" z zapamiętywaniem kombinacji węzłów. Trudno tak od razu podać gotowy kod, ale algorytm byłby następujący: 1. Weź pierwszy wolny element. 2. Dodaj do niego "następny". 3. Sprawdź czy wielokrotność 1000 a jeśli tak to zapisz id korzenia i "następnych" 4. Jeśli suma większa od 10.000 to wymień ten "następny" na najbliższy wolny. 5. Jeśli suma mniejsza niż 10.000 dodaj następny "wolny". 6. Idź do kroku 3 7. Jeśli "następny" doszedł do końca tablicy to wymień "następny" element w kroku 2. 8. Jeśli i on doszedł do końca to dopiero przesuń "korzeń" o 1 pozycje. 9. Gdy "korzeń" dojdzie do końca to koniec sprawdzania. Tak więc zrobi się z tego tak naprawdę ostro rozjechany krzaczor sprawdzający wszystko jak popadnie (IMG:style_emoticons/default/winksmiley.jpg) EDIT: Dziewczyna mnie zirytowała więc siadłem na kompie i popełniłem ten rekurencyjny kod, by odreagować... W $bulls_eye masz wyniki, $src to Twoje kupony z AminoLotto (IMG:style_emoticons/default/biggrin.gif) Parę zmiennych można było liczyć na bieżąco, ale by nie robić tego co i rusz to przekazywałem do funkcji jako parametry. W wyniku otrzymujesz coś takiego dla mojego kompletnie zmyślonego przypadku i klepania po klawiaturze numerycznej:
EDIT2: Foreach od 21 linijki już tylko obrabia wyniki byś widział jakie kwoty są konieczne do zsumowania. Ale konkretne indeksy masz już w tym momencie dostępne. Wystarczy że zrobisz var_dump($bulls_eye), a dostaniesz tablicę 2-wymiarową, gdzie jako wartości są klucze po przecinku i suma. Ten post edytował thek 30.11.2009, 22:11:25 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 8.10.2025 - 15:23 |