Diskuze: Vytvorenie vyhier
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 11 zpráv z 11.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
no, nevím jak to říct, ale vysvětlím to takovým pseudo kódem
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ě
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 $
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í;
}
no jo
ale ked si to potom zratam tak je to viac ako 100 , pritom je celkovy bank 100$
Je to strašně složitý a ještě to nefunguje pořádně
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
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í
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
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
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
Zkus namísto dělení poměrem od peněz odečítat aktuální výhru.
Zobrazeno 11 zpráv z 11.