Kezdőoldal » Számítástechnika » Programozás » Hogyan hozzam létre a következ...

Hogyan hozzam létre a következő képletet?

Figyelt kérdés

Egy nem annyira ismert nyelvben a pawno-ban próbálok írni egy multiplayer játékhoz egy privát üzenet küldő rendszert.

A játékban minden játékosnak van egy azonosító száma. A legkisebb 0 a legnagyobb pedig a max férőhej-1.

Úgy szeretném megoldani a szövegek tárolását hogy az azonosítókból párokat alkotok és a pároknak lennének karakterláncjai. És ezeket a karakterláncokat ellátnám egy egy azonosítószámmal ami a 2 azonosítóból következik.


Tehát például

0,1 = 0

0,2 = 1

0,3 = 2


hogy elkerüljem, hogy egy egy párhoz több karakterlánc is tartozzon Ezzel a képlettel kiszámoltam mennyi lehet egy n férőhejjel rendelkező játékszerveren a karakterláncok száma.


n*(n-1)/2


A gondot az okozza, hogy nem tudok rájönni, milyen műveletsorozatot kéne elvégezni ahhoz, hogy két játékosazonosítóból megkapjuk a karakterlánc azonosítóját.

Fontos, hogy a karakterláncok azonosítója 0-tól a maximumig minden azonosító fel legyen használva. Köszönöm előre is a segítséget.


2012. márc. 3. 15:55
 1/5 Srapnel ***** válasza:
Ha n a játékosok száma, akkor egy (a, b) párhoz tartozó karakterlánc azonosító: a * n + b, vagy a + b * n.
2012. márc. 3. 19:55
Hasznos számodra ez a válasz?
 2/5 Srapnel ***** válasza:

Ha pedig az a baj, hogy az (a, b) és a (b, a) párokhoz ugyanaz tartozzon, akkor:


max(a, b) * (max(a, b) - 1)/2 + min(a, b)


Ez segít megérteni:


|01234

-+-----

0|.....

1|0....

2|12...

3|345..

4|6789.


(copy-zd be monospaced karakterkészletes szerkesztőbe)

"a" és "b" ugye a játékosok sorszáma.


A sorok az "a" szerint mennek, az oszlopok a "b" szerint. A mátrixba beírtam a stringek azonosítóját. Ahol "." van, ott nem értelmezett az érték, mert vagy magával beszélne a játékos, vagy a fordított párról van szó (ab helyett ba).

2012. márc. 3. 20:05
Hasznos számodra ez a válasz?
 3/5 A kérdező kommentje:
Köszönöm a részletes választ, Meg tudnád esetleg tenni, hogy C++-ban leírnád a függvényt? Nemigazán értem a gondolkodásmeneted
2012. márc. 3. 22:32
 4/5 Srapnel ***** válasza:

Ez már C++-ban is így néz ki, a max/min függvényeket értelemszerűen valami math könyvtárból veheted. Magyarázat újra:


Ha jól értem, a feladat az, hogy vannak játékosok, n darab. A játékosok azonosítója 0..n-1. A feladat az, hogy a játékospárokhoz rendeljünk azonosítókat úgy, hogy az is egy szám legyen és 0..(n*(n-1)/2) tartományban legyen, vagyis ne legyen fel nem használt azonosító és mindegyik a párokkal kölcsönösen egyértelműen legyen összerendelve, úgy, hogy a párokban a játékosok sorrendje nem számít (vagyis a (3, 7) párhoz ugyanaz az azonosító tartozzon, mint a (7, 3)-hoz). Az egyértelmű összerendelés azt jelenti, hogy nincs két string azonosító, amely ugyanahoz a két játékoshoz tartozna és nincs két játékospár, amelyekhez ugyanaz a string azonosító tartozna.


Na, ekkor a sorrendproblémát megoldhatjuk úgy, hogy a párokat mindig úgy írjuk föl, hogy a nagyobb sorszámú játékos legyen a pár első, a kisebbik a második tagja. Tehát ekkor az alábbi párok vannak pl. 4 játékos esetén: (1, 0), (2, 0), (2, 1), (3, 0), (3, 1), (3, 2) - látható, hogy az első szám mindig nagyobb, mint a második.


Ezekhez kellene akkor azonosítót rendelni a feladatnak megfelelő módon. Kézenfekvő is az alábbi:


(1, 0) : 0

(2, 0) : 1

(2, 1) : 2

(3, 0) : 3

(3, 1) : 4

(3, 2) : 5


Ehhez kellene képlet. Ha az előbbi sorozatot a másik hozzászólásomban látható táblázatos elrendezésben írod föl, vagyis nem egymás alá, akkor látható, hogy a sor elején lévő string azonosító érték csak az első pár azonosítójától függ, mégpedig a*(a-1)/2. Ehhez hozzáadva b-t, megvan a string azonosító.


Ha a táblázatot nem érted: a táblázat a játékospárokhoz tartozó string azonosítókat adja. A sorok fejlécében a nagyobbik sorszámú, az oszlopokéban a kisebbik sorszámú játákos sorszáma látható. Így, ha a (3, 1) pár azonosítóját akarod kiolvasni, akkor a 4. sor (3. számú) 2. oszlopa (1. számú) értéke adja a string azonosítót. A táblázat átlójában nem értelmezett string azonosító, mert a játékosok saját magukkal nem beszélnek. Hasonlóan a jobb-felső háromszög-része sem, mert a fentiekben alapján a párok tagjait rendeztük: nagyobb elöl, kisebb hátul.

2012. márc. 4. 07:21
Hasznos számodra ez a válasz?
 5/5 A kérdező kommentje:

Így már értem.

Nagyon köszönöm.

2012. márc. 4. 09:05

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!