#1205
Nod
Pe vremea maurilor, transmiterea unor mesaje codificate între două persoane se făcea folosind un cifru numit nod. Cele două persoane alegeau în secret o poveste. Aceasta era scrisă într-o carte folosind litere mici și mari ale alfabetului englez, pe P
pagini, numerotate de la 1
la P
, fiecare conținând exact R
rânduri, numerotate în cadrul fiecărei pagini de la 1
la R
, iar fiecare rând fiind format din exact C
cuvinte, numerotate în cadrul fiecărui rând de la 1
la C
.
Un cuvânt al mesajului de transmis era codificat prin poziția sa în povestea aleasă de cei doi, folosind trei numere scrise cu cifre romane, ce indicau în ordine: numărul paginii, numărul rândului în cadrul paginii, respectiv al cuvântului în cadrul rândului.
Mesajul astfel codificat era scris pe trei linii. Pe prima linie erau scrise numerele paginilor, pe a doua linie numerele rândurilor, iar pe a treia linie erau scrise numerele de ordine ale cuvintelor.
Presupunem că mesajul este format din primul cuvânt de pe al cincilea rând al celei de a doua pagini și din al patrulea cuvânt de pe rândul al doilea al primei pagini. Mesajul putea fi transmis pe trei linii în modul următor:
II I
(numerele paginilor)V II
(numerele rândurilor)I IV
(numerele cuvintelor)Cifrele romane sunt scrise cu majusculele M
, D
, C
, L
, X
, V
, I
, iar valorile corespunzătoare lor sunt în ordine: 1000
, 500
, 100
, 50
, 10
, 5
, 1
. Valoarea unui număr scris cu cifre romane se calculează parcurgând de la stânga la dreapta cifrele numărului astfel:
De exemplu pentru numărul MCDXLVI
scris cu cifre romane, se obține valoarea 1446
în sistem zecimal, astfel: 1000-100+500-10+50+5+1
, iar pentru numărul XXI
scris cu cifre romane se obține valoarea 21
în sistemul zecimal astfel: 10+10+1
.
Cunoscându-se textul poveștii ales de cei doi și mesajul codificat de ei scrieți un program care rezolvă următoarele două cerințe:
a) Rescrie mesajul codificat folosind scrierea cu cifre din sistemul zecimal.
b) Afișează toate cuvintele mesajului decodificat în ordinea în care acestea apar în poveste.
Problema | Nod | Operații I/O |
nod.in /nod.out
|
---|---|---|---|
Limita timp | 0.5 secunde | Limita memorie |
Total: 2 MB
/
Stivă 2 MB
|
Id soluție | #54261273 | Utilizator | |
Fișier | nod.cpp | Dimensiune | 2.30 KB |
Data încărcării | 23 Noiembrie 2024, 20:24 | Scor / rezultat | 100 puncte |
nod.cpp: In function 'int numar(std::string, int, int)': nod.cpp:21:18: warning: array subscript has type 'char' [-Wchar-subscripts] if(A[s[i]] >= A[s[i+1]]) ^ nod.cpp:21:31: warning: array subscript has type 'char' [-Wchar-subscripts] if(A[s[i]] >= A[s[i+1]]) ^ nod.cpp:22:24: warning: array subscript has type 'char' [-Wchar-subscripts] n += A[s[i]]; ^ nod.cpp:24:24: warning: array subscript has type 'char' [-Wchar-subscripts] n -= A[s[i]]; ^ nod.cpp:25:16: warning: array subscript has type 'char' [-Wchar-subscripts] n += A[s[b]]; ^ nod.cpp: In function 'int main()': nod.cpp:46:41: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for(int i = 0; i < s.length(); i++) ^ nod.cpp:50:42: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] while(j < s.length()-1 && s[j+1] != ' ') ^ nod.cpp:67:41: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for(int i = 0; i < s.length(); i++) ^ nod.cpp:72:42: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] while(j < s.length()-1 && s[j+1] != ' ') ^
Test | Timp | Mesaj evaluare | Scor posibil | Scor obținut | ||
---|---|---|---|---|---|---|
0 | 0 secunde | OK. | 10 | 10 | ||
1 | 0 secunde | OK. | 10 | 10 | ||
2 | 0 secunde | OK. | 10 | 10 | ||
3 | 0 secunde | OK. | 10 | 10 | ||
4 | 0 secunde | OK. | 10 | 10 | ||
5 | 0.012 secunde | OK. | 10 | 10 | ||
6 | 0.02 secunde | OK. | 10 | 10 | ||
7 | 0.028 secunde | OK. | 10 | 10 | ||
8 | 0.064 secunde | OK. | 10 | 10 | ||
9 | 0.076 secunde | OK. | 10 | 10 | ||
Punctaj total | 100 |
www.pbinfo.ro permite evaluarea a două tipuri de probleme:
Problema Nod face parte din prima categorie. Soluția propusă de tine va fi evaluată astfel:
Suma punctajelor acordate pe testele utilizate pentru verificare este 100. Astfel, soluția ta poate obține cel mult 100 de puncte, caz în care se poate considera corectă.