Forum » Programiranje » [C++] Kocka (naloga iz tekmovanja)
[C++] Kocka (naloga iz tekmovanja)
Slovenia13 ::
Napiši program ki bo prebral začetno postavitev kocke. števila na stranicah bodo od 1 - 6. Prva vrstica vhoda ima obliko "[zgoraj][spodaj][levo][desno][spredaj][zadaj]" (npr: "6 1 3 4 2 5" (zgornja ploskev = 6; spodna = 1; leva = 3; desna = 4;...))
V spodnji vrstici pa bo sledil niz potez. Vsaka poteza bo predstavljena z eno od črk F(kocka se prevali na sprednjo ploskev),B(na zadnjo ploskev),L(na levo),R(na desno). Da so nizi krajši so nekatere enake zaporedne poteze zapisane s črko(F,B,L,R) tej črki pa sledi število prevračanj v tej smeri (npr: FB3 pomeni 1xna sprednjo in 3xna zadnjo ploskev).
Izpiši končno postavitev kocke na enak način kot je bila postavitev prebrana.
No men je uspel, da se kocka lepo obrača v željeno smer. ne rata pa mi kko narest d bo program pogledu če je po določeni potezi število in tolikokrat izvedel tisto potezo. žal ne morem prilepiti kode ker nisem doma.
V spodnji vrstici pa bo sledil niz potez. Vsaka poteza bo predstavljena z eno od črk F(kocka se prevali na sprednjo ploskev),B(na zadnjo ploskev),L(na levo),R(na desno). Da so nizi krajši so nekatere enake zaporedne poteze zapisane s črko(F,B,L,R) tej črki pa sledi število prevračanj v tej smeri (npr: FB3 pomeni 1xna sprednjo in 3xna zadnjo ploskev).
Izpiši končno postavitev kocke na enak način kot je bila postavitev prebrana.
No men je uspel, da se kocka lepo obrača v željeno smer. ne rata pa mi kko narest d bo program pogledu če je po določeni potezi število in tolikokrat izvedel tisto potezo. žal ne morem prilepiti kode ker nisem doma.
Tutankhamun ::
kaj pa to poemni, da se 3x zakotali po zadnji stranici, pa 1x po sprednji? Kako se pa to kotali? 3x skoči po zadnji stranici?
AMD Phenom QUAD 9950 Black Edition, 8GB
Tutankhamun ::
Ajaaaa premiki so naprej levo pa desno. Se pravi 1x naprej pa 3x nazaj. To nism kuj zastopu.
A zdej te pa zanima katera cifra je spodi pa zgori pa levo pa desno po premiku?
A zdej te pa zanima katera cifra je spodi pa zgori pa levo pa desno po premiku?
AMD Phenom QUAD 9950 Black Edition, 8GB
Tutankhamun ::
Js bi tko reku, sm se mal igrov s kocko. :)
Če te zanima katera številka je na vrhu kocke pa spodi.... po metu, bi js tko na naredu.
Če maš kotaljenje definirano takole: 9x naprej, 2x levo, 1x nazaj, 3x desno
Sploh ni važn v kakšnem vrstnem redu greš. Lahk jih prememšaš med sabo. Uglavnem to lahko potem mal poenostavš v:
9x naprej + 1x nazaj = 8x naprej oz. 0x naprej (8 % 4 = 0; 0x - ni kotaljenja)
2x levo + 3x desno = 1x desno
Pol pa res ni več problem ugotovit kako je kocka postavljena, ker imaš samo dve smeri, pa še te se zakotalijo za največ 3x.
Pol pa imaš recimo kocko: 6 je spodi, 1 zgori, 2 na desni, 5 na levi, 3 spredaj in 4 zadaj
Pol pa lahko vrtiš naprej 6314 6314 ... al pa nazaj 6413 6413
al pa levo 6215 6215 ... al pa desno 5126 5126
Tko na hitrco.
Če te zanima katera številka je na vrhu kocke pa spodi.... po metu, bi js tko na naredu.
Če maš kotaljenje definirano takole: 9x naprej, 2x levo, 1x nazaj, 3x desno
Sploh ni važn v kakšnem vrstnem redu greš. Lahk jih prememšaš med sabo. Uglavnem to lahko potem mal poenostavš v:
9x naprej + 1x nazaj = 8x naprej oz. 0x naprej (8 % 4 = 0; 0x - ni kotaljenja)
2x levo + 3x desno = 1x desno
Pol pa res ni več problem ugotovit kako je kocka postavljena, ker imaš samo dve smeri, pa še te se zakotalijo za največ 3x.
Pol pa imaš recimo kocko: 6 je spodi, 1 zgori, 2 na desni, 5 na levi, 3 spredaj in 4 zadaj
1 3 2 6 5 4
Pol pa lahko vrtiš naprej 6314 6314 ... al pa nazaj 6413 6413
al pa levo 6215 6215 ... al pa desno 5126 5126
Tko na hitrco.
AMD Phenom QUAD 9950 Black Edition, 8GB
Zgodovina sprememb…
- spremenil: Tutankhamun ()
Tutankhamun ::
Mal drgač sm hotu napisat.
Predpostavmo da je na začetku številka 6 na dnu, 2 na levi in 3 na spredni strani klocke.
Premikanje naprej 3x
Premikanje desno 3x
Tko nekak bi js naredu.
Predpostavmo da je na začetku številka 6 na dnu, 2 na levi in 3 na spredni strani klocke.
Premikanje naprej 3x
1 4 6 3 3 1 4 6 2 6 5 2 3 5 2 1 5 2 4 5 4 6 3 1
Premikanje desno 3x
1 2 6 5 3 3 3 3 2 6 5 6 5 1 5 1 2 1 2 6 4 4 4 4
Tko nekak bi js naredu.
AMD Phenom QUAD 9950 Black Edition, 8GB
Slovenia13 ::
ubistvo men ne rata d program prebere število po ukazu (npr: F14 mi prebere sam F, 14 pa ne dubim)
Ktj ::
če mu podaš parameter kot: program.exe 123456 F14 L22...
int poteze;
char obrat;
for(int i = 2; i < argc;i++)
{
obrat = argv[i][0];
poteze = atoi(argv[i][1]);
// naredi premike oz karkoli
}
Mogoče je kakšna napaka ker pišem iz glave.
int poteze;
char obrat;
for(int i = 2; i < argc;i++)
{
obrat = argv[i][0];
poteze = atoi(argv[i][1]);
// naredi premike oz karkoli
}
Mogoče je kakšna napaka ker pišem iz glave.
Tutankhamun ::
Če maš še problem, dej kar maš kode za branje sm prlep, da ti kdo poprav.
AMD Phenom QUAD 9950 Black Edition, 8GB
Zgodovina sprememb…
- spremenil: Tutankhamun ()
Tutankhamun ::
Evo neki sm spacov skp za branje metov!
Pa ne pozabt includat "sstream"
Pa ne pozabt includat "sstream"
stringstream ssThrow; ssThrow << "FB2LR15F1"; char move; int count; while (!ssThrow.eof ()) { count = 1; ssThrow >> move; ssThrow >> count; cout << move << count << endl; if (ssThrow.rdstate() & ios::failbit) ssThrow.clear (); }
AMD Phenom QUAD 9950 Black Edition, 8GB
Zgodovina sprememb…
- spremenil: Tutankhamun ()
Slovenia13 ::
Hvala to mi dela sam za tvoj primer ko pa upišem niz ukazou "LFF12RRRL" mi pa piše:
L1
L1
L1
L1
...
Zakaj?
L1
L1
L1
L1
...
Zakaj?
Zgodovina sprememb…
- spremenil: Slovenia13 ()
Tutankhamun ::
Sm prehit delu, pa sm si izbral slab primer. Pa tut s tem ne delam tok velik, tko da napake so lahk prisotne ;). Evo zdej sm pa clo prebral kako tist clear deluje, prej nism :P. Evo popravljeno.
Pa while lahk tut postavš gor če hočeš, da bo tko kot prej.
stringstream ssThrow; ssThrow << "LFF12RRRL"; char move; int count; do { ssThrow.clear (); count = 1; ssThrow >> move; ssThrow >> count; cout << move << count << endl; } while (!ssThrow.eof ());
Pa while lahk tut postavš gor če hočeš, da bo tko kot prej.
AMD Phenom QUAD 9950 Black Edition, 8GB
Zgodovina sprememb…
- spremenil: Tutankhamun ()
Slovenia13 ::
Zdj sm mal sprobavu pa popravu uno t staro kodo pa dubu sam mi ne dela izpiše kar jst vpišem (pozicija kocke)
#include <iostream> #include <string> #include <sstream> using std::cin; using std::cout; using std::endl; using std::string; using std::stringstream; int main (int argc, char* argv[]) { int iPonovi; char cUkaz; char cKocka[7]; string sVhod; stringstream ssNiz; for (int i = 1; i < 7; i++) { cin >> cKocka[i]; } cin >> sVhod; ssNiz << sVhod; while (!ssNiz.eof()) { ssNiz.clear(); iPonovi = 1; ssNiz >> cUkaz; ssNiz >> iPonovi; for (int i = 0; i < iPonovi; i++) { switch(cUkaz) { case 'F' : cKocka[0] = cKocka[1]; cKocka[1] = cKocka[6]; cKocka[6] = cKocka[2]; cKocka[2] = cKocka[5]; cKocka[5] = cKocka[0]; case 'B' : cKocka[0] = cKocka[1]; cKocka[1] = cKocka[5]; cKocka[5] = cKocka[2]; cKocka[2] = cKocka[6]; cKocka[6] = cKocka[0]; case 'L' : cKocka[0] = cKocka[1]; cKocka[1] = cKocka[4]; cKocka[4] = cKocka[2]; cKocka[2] = cKocka[3]; cKocka[3] = cKocka[0]; case 'R' : cKocka[0] = cKocka[1]; cKocka[1] = cKocka[3]; cKocka[3] = cKocka[2]; cKocka[2] = cKocka[4]; cKocka[4] = cKocka[0]; } } } for (int i = 1; i < 6; i++) { cout << cKocka[i] << endl; } cout << cKocka[6]; while(true); }
Zgodovina sprememb…
- spremenil: Slovenia13 ()
Tutankhamun ::
No sam tok, da veš sm prej pozabu napisat. Prej ni delal zato ker se je tvoja sekvenca končala brez številke na konc ;)
AMD Phenom QUAD 9950 Black Edition, 8GB
Tutankhamun ::
komot ti povem. Samo primer:
Poglej prvo pa zadnjo vrstico kode, v mojem postu
Najprej na pozicijo 0 shranš vrednost, ki je bila na poziciji 1. Pol pa to isto vrednost v zadnji vrstici kopiraš na pozicijo vrednost 5. Samo primer, tega maš velik.
Evo neki sm na hit naredu, premika se pa tko sam naprej pa levo. Če se hočeš premaknt za eno v desno, je to isto kot če bi se premaknu 3x v levo. "levo = 4 - desno". Enako je za naprej nazaj!!!
Poglej prvo pa zadnjo vrstico kode, v mojem postu
cKocka[0] = cKocka[1]; cKocka[1] = cKocka[6]; cKocka[6] = cKocka[2]; cKocka[2] = cKocka[5]; cKocka[5] = cKocka[0];
Najprej na pozicijo 0 shranš vrednost, ki je bila na poziciji 1. Pol pa to isto vrednost v zadnji vrstici kopiraš na pozicijo vrednost 5. Samo primer, tega maš velik.
Evo neki sm na hit naredu, premika se pa tko sam naprej pa levo. Če se hočeš premaknt za eno v desno, je to isto kot če bi se premaknu 3x v levo. "levo = 4 - desno". Enako je za naprej nazaj!!!
int bottom, top, left, right, front, back; int *move_forward [] = {&bottom, &front, &top, &back, &bottom, &front, &top}; int *move_left [] = {&bottom, &left, &top, &right, &bottom, &left, &top}; bottom = 6; left = 2; right = 5; front = 3; back = 4; top = 1; // display cout << " " << top << endl; cout << " " << front << endl; cout << left << " " << bottom << " " << right << endl; cout << " " << back << endl << endl; int temp [4]; int throw_forward = 3; int throw_left = 3; // throw forward for (int i = 0; i < 4; i++) temp [i] = *move_forward [throw_forward + i]; for (int i = 0; i < 4; i++) *move_forward [i] = temp [i]; // throw left for (int i = 0; i < 4; i++) temp [i] = *move_left [throw_left + i]; for (int i = 0; i < 4; i++) *move_left [i] = temp [i]; // display cout << " " << top << endl; cout << " " << front << endl; cout << left << " " << bottom << " " << right << endl; cout << " " << back << endl;
AMD Phenom QUAD 9950 Black Edition, 8GB
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | c++ rabim pomoč konstuktorjiOddelek: Programiranje | 1090 (785) | Snowflake2 |
» | matematični nalogiOddelek: Šola | 1568 (1191) | technolog |
» | Naloga v C#Oddelek: Programiranje | 2608 (2108) | Hardstyle |
» | Rubikova KockaOddelek: Loža | 4389 (3664) | Valentin |