Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Neaktivní uživatel:4.8.2013 10:45

Zdravim tak mam taky maly problem pravdepodobne matematicky. Jedna sa o to ako vytvorim funkciu ktora vytvori list vyhercov. Priklad : prizepool je 100 $ hraci su 100 moje pravidlo je ze vyhravaju prvy 10 % ludi tj. 10 ludi a tu je ten problem ako dalej roozdelim tych 100 $ medzi tych 10 ludi ale tak aby prvy mal najviac druhy menej atd...?

Odpovědět
4.8.2013 10:45
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Neaktivní uživatel:4.8.2013 10:58

no, nevím jak to říct, ale vysvětlím to takovým pseudo kódem :D

penize = 100; //sto dolarů
hraci = 100; //sto hráčů
vyhrava = 0.1; //vyhrává těch 10% hráčů

for(i = 0; i < hraci * vyhrava; i++)
{
  vyhra = penize / 2;
  peníze /= 2;
  // 1. 50 dolaru
  // 2. 25 dolaru
  // 3. 12,5 dolaru
  // 4. 6,25 dolaru
  // ...
  // 9. ...
}

vyhra = penize // 10., poslední

A je to i celkem pěkně oddělené, první dostane celkem hezkou výhru, druhý o půlku menší, pak každý o něco malinko méně a ti poslední budou mít už skoro stejně :)

Nahoru Odpovědět
4.8.2013 10:58
Neaktivní uživatelský účet
Avatar
Neaktivní uživatel:4.8.2013 11:39

ono je to dobry ale ten posledny vyhra jenom 0.09 coz je malo ne da se to upravit tak aby mnel prvy treba 25 $ ? tak aby posledny mnel aspon 1 $

Nahoru Odpovědět
4.8.2013 11:39
Neaktivní uživatelský účet
Avatar
jenda
Člen
Avatar
Odpovídá na Neaktivní uživatel
jenda:4.8.2013 21:52

Pokud budeme předpokládat rovnoměrné rozdělení výher, tak by to mohlo být takto:

int pocetHracu = 60; // nastavení počtu hráčů
double velikostVyberu = 0.1; //počet hráčů, kteří budou vyhrávat jako desetinné číslo (0.1 = 10%)
double pocetVyhercu = pocetHracu * velikostVyberu; // počet hráčů, kteří vyhrají
int celkovaVyhra = 100; // nastavení velikosti celkové výhry
int maximalniVyhra = 50; // nastavení maximální výhry
int minimalniVyhra = 5; // nastavení minimální výhry
int zbyvaRozdelit = celkovaVyhra - maximalniVyhra - minimalniVyhra; // množství peněz k rozdělení pro ostatní vyhrávající, kromě první a posledního vyhrávajícího
double krokRozdelení = zbyvaRozdelit / (pocetVyhercu - 1); //předpokládáme rovnoměrné (lineární) rozdělení výher
double vyhra = maximalniVyhra;

for (int i=1; i < pocetVyhercu+1; i++)
{
    Console.WriteLine(i + ". " + vyhra.ToString());
    vyhra = vyhra - krokRozdelení;
}
Editováno 4.8.2013 21:53
 
Nahoru Odpovědět
4.8.2013 21:52
Avatar
Neaktivní uživatel:4.8.2013 22:35

no jo

  1. 50
  2. 41
  3. 32
  4. 23
  5. 14
  6. 5

ale ked si to potom zratam tak je to viac ako 100 :), pritom je celkovy bank 100$

Nahoru Odpovědět
4.8.2013 22:35
Neaktivní uživatelský účet
Avatar
Odpovídá na jenda
Neaktivní uživatel:4.8.2013 22:51

Je to strašně složitý a ještě to nefunguje pořádně :)

Nahoru Odpovědět
4.8.2013 22:51
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Neaktivní uživatel:4.8.2013 22:58

tak šlo by to, stačí změnit to číslo kterým se dělí na menší :) problém bude s koncem, kdy pro posledního zbyde víc než pro pár předešlých :D

penize = 100; //sto dolarů
hraci = 100; //sto hráčů
vyhrava = 0.1; //vyhrává těch 10% hráčů
pomer = 1.5; // může být mezi 1.5 a nekonečnem

for(i = 0; i < hraci * vyhrava - 1; i++)
{
  vyhra = penize / pomer;
  peníze /= pomer;
}

vyhra = penize / 2 // pro posledního a předposledního

takhle ti vyjdou postupně výhry pro všechny, s menšími skoky. Když bude poměr větší než 1.5, pak budou mít poslední dva stejně velikou výhru, když bude poměr 1.5, tak budou mít poslední 3 stejnou výhru a při menším poměru se to podělá ... nevím jestli to je ideální řešení, ale je o řešení ;)

Nahoru Odpovědět
4.8.2013 22:58
Neaktivní uživatelský účet
Avatar
Ľuboš Čurgó
Tvůrce
Avatar
Ľuboš Čurgó:4.8.2013 23:18

Ked budes mat vzdy 100 hracov a 100$ tak to nabuchaj na pevno. Ked nie tak si celkove peniaze prepocitaj na percenta a podla nich ich rozdeluj prvym 10

 
Nahoru Odpovědět
4.8.2013 23:18
Avatar
Neaktivní uživatel:5.8.2013 9:20

prave ze pocet hracov bude dynamicky raz moze byt 15236 a raz 100 ale vyhravaju stale 10% to je na pevno u mna.Len to rozratavanie vyhier je dost prbolem :)

Nahoru Odpovědět
5.8.2013 9:20
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Neaktivní uživatel:5.8.2013 11:38

funebrak ale i tvuj kod presahuje maximalni vyhru
66.66666666666667
44.44444444444445
29.629629629629633
19.75308641975309
13.168724279835393
8.779149519890263
5.8527663465935085
3.901844231062339
2.601229487374893

Nahoru Odpovědět
5.8.2013 11:38
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Michael Olšavský:5.8.2013 11:43

Zkus namísto dělení poměrem od peněz odečítat aktuální výhru.

 
Nahoru Odpovědět
5.8.2013 11:43
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.