Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][algorytmy] rozdawanie punktów
Forum PHP.pl > Forum > Przedszkole
monkey
witam
Mam problem z ułożeniem algorytmu rozdziału punktów.

Sytuacja wygląda następująco: mam do rozdzielenia 1000 punktów i muszę je rozdzielić powiedzmy na 10 userów.

to ile każdy dostanie zależy od tego jaki ma nazwijmy to poziom

powiedzmy ze jest on w zakresie 1-100;

user1 - 10
user2 - 11
user3 - 20
user4 - 35
user5 - 51
user6 - 51
user7 - 70
user8 - 82
user9 - 91
user10 -91

i teraz tak: ten z najmniejszym poziomem ma dostać 0 a reszta w zależności od poziomu

i teraz potrzepuje ułożyć algorytm który odpowiednio każdemu przydzieli punkty

z góry dzięki za pomoc
michal_robak
Prosta matematyka ... sam byś to zrobił żebyś poświęcił 5 minut :

  1. <?
  2.  
  3. $lista = array("10","11","20","35","51","51","70","82","91","99");
  4. $suma=0;
  5. foreach($lista as $nowa)
  6. {
  7. $suma=$suma + $nowa;
  8. }
  9.  
  10. echo "wynik = ".$suma;
  11. $suma_punktow = 1000;
  12. echo "<br>";
  13. $procenty = $suma_punktow / $suma;
  14. echo "procenty = ".$procenty;
  15. echo "<br>";
  16. $rozdzielone=0;
  17. foreach($lista as $nowa)
  18. {
  19. echo "poziom ".$nowa." otrzymuje ".round($nowa*$procenty)." punktów<br>";
  20. $rozdzielone = $rozdzielone + round($nowa*$procenty);
  21. }
  22.  
  23. echo "Rozdane punkty ".$rozdzielone;
  24. ?>


gdzie $suma = łączna suma poziomów
$suma_punktów = łączna pula punktów do rozdania ( u ciebie 1000)
$procenty = stosunek lacznej liczby punktów do lacznej liczby poziomow

a to wynik tego skryptu:
Kod
wynik = 520
procenty = 1.9230769230769
poziom 10 otrzymuje 19 punktów
poziom 11 otrzymuje 21 punktów
poziom 20 otrzymuje 38 punktów
poziom 35 otrzymuje 67 punktów
poziom 51 otrzymuje 98 punktów
poziom 51 otrzymuje 98 punktów
poziom 70 otrzymuje 135 punktów
poziom 82 otrzymuje 158 punktów
poziom 91 otrzymuje 175 punktów
poziom 99 otrzymuje 190 punktów
Rozdane punkty 999


i wcale najniższy poziom tu u ciebie 10 nie ma dostać 0 punktów bo rozkład ma być równomierny
monkey
no właśnie poświęciliśmy z kumplem i to bardzo dużo czasu

tylko cały czas probowaliśmy rozwiązać to tak że ostatni dostaje 0 punktów

ale dzięki za twoje rozwiązanie, zmyśle ze na pewno nam pomoże

i już pomogło

wystarczy przecież od poziomu każdego użytkownika odjąć poziom najniższego użytkownika i juz ostatni dotaje 0

wielkie dzięki za pomoc
michal_robak
nie ma sprawy ... idz na fizykę to wtedy takie problemy nie beda dla ciebie żadną przeszkodą smile.gif.
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.