Diskuze: Vytvorenie vyhier

C# .NET .NET (C# a Visual Basic) Vytvorenie vyhier American English version English version

Avatar
Neaktivní uživatel:

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
Jiří Gracík
Redaktor
Avatar
Odpovídá na Neaktivní uživatel
Jiří Gracík:

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
Creating websites is awesome till you see the result in another browser ...
Avatar
Neaktivní uživatel:

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:

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:

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
Jiří Gracík
Redaktor
Avatar
Odpovídá na jenda
Jiří Gracík:

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

Nahoru Odpovědět 4.8.2013 22:51
Creating websites is awesome till you see the result in another browser ...
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na Neaktivní uživatel
Jiří Gracík:

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
Creating websites is awesome till you see the result in another browser ...
Avatar
Ľuboš Čurgó
Redaktor
Avatar
Ľuboš Čurgó:

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:

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:

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ý:

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.