Cerința
Se citește numărul n
și apoi n
articole cu structura: prenume nume salariu vârstă funcție număr_de_telefon email
. Fiecare articol este plasat pe câte o linie, câmpurile sale fiind separate prin câte un spațiu. Câmpurile salariu
și vârstă
conțin numere naturale, celelalte conțin șiruri de caractere.
Se citește apoi un număr natural p
cuprins între 1
și 7
și un caracter c
care poate fi +
sau -
.
Se cere ordonarea celor n
articole în funcție de p
și c
, astfel:
- dacă
p=1
, ordonarea se face dupăprenume
; dacăp=2
, ordonarea se face dupănume
; dacăp=3
, ordonarea se face dupăsalariu
; dacăp=4
, ordonarea se face dupăvârstă
; dacăp=5
, ordonarea se face dupăfuncție
; dacăp=6
, ordonarea se face dupănumăr_de_telefon
; dacăp=7
, ordonarea se face dupăemail
; - dacă
c
are valoarea+
, ordonarea va fi crescătoare, iar dacăc
are valoarea-
, ordonarea va fi descrescătoare; - dacă două articole au aceeași valoare a câmpului în raport cu care se face sortarea, ordinea lor nu se va modifica.
Date de intrare
Programul citește de la tastatură numărul n
, apoi cele n
articole, fiecare pe câte o linie, câmpurile fiecărui articol fiind separate prin câte un spațiu, apoi p
și c
cu semnificația din enunț.
Date de ieșire
Programul va afișa pe ecran articolele sortate conform cerinței. Fiecare articol va fi afișat pe câte o linie, câmpurile fiind separate prin câte un spațiu.
Restricții și precizări
1 ≤ n ≤ 80
- câmpurile numerice vor avea valori pe 64 de biți fără semn, iar celelalte vor avea maximum
255
de caractere.
Exemplu
Intrare
3 Len Trexler 100000 55 Spymaster 5554440192 [email protected] Oliver Regina 0 37 Vigilante 1234567890 [email protected] Sterling Archer 1000000 43 Agent 8423565491 [email protected] 2 +
Ieșire
Sterling Archer 1000000 43 Agent 8423565491 [email protected] Oliver Regina 0 37 Vigilante 1234567890 [email protected] Len Trexler 100000 55 Spymaster 5554440192 [email protected]
Explicație
S-a sortat crescător după nume(2), și s-au afișat.
#include <bits/stdc++.h> using namespace std; int n , p; char c; struct poz { char prenume[80] , nume[80] , tel[80] , email[80] , fct[80]; unsigned long long salariu , varsta , pozz; }a[256]; int comp_prenume(poz a , poz b){return strcmp(a.prenume , b.prenume) < 0 || strcmp(a.prenume , b.prenume) == 0 && a.pozz < b.pozz;} int comp_nume(poz a , poz b){return strcmp(a.nume , b.nume) < 0 || strcmp(a.nume , b.nume) == 0 && a.pozz < b.pozz;} int comp_tel(poz a , poz b){return strcmp(a.tel , b.tel) < 0 || strcmp(a.tel , b.tel) == 0 && a.pozz < b.pozz;} int comp_email(poz a , poz b){return strcmp(a.email , b.email) < 0 || strcmp(a.email , b.email) == 0 && a.pozz < b.pozz;} int comp_fct(poz a , poz b){return strcmp(a.fct , b.fct) < 0 || strcmp(a.fct , b.fct) == 0 && a.pozz < b.pozz;} int comp_salariu(poz a , poz b){return a.salariu < b.salariu || a.salariu == b.salariu && a.pozz < b.pozz;} int comp_varsta(poz a , poz b){return a.varsta < b.varsta || a.varsta == b.varsta && a.pozz < b.pozz;} int comp_prenume1(poz a , poz b){return strcmp(a.prenume , b.prenume) > 0 || strcmp(a.prenume , b.prenume) == 0 && a.pozz > b.pozz;} int comp_nume1(poz a , poz b){return strcmp(a.nume , b.nume) > 0 || strcmp(a.nume , b.nume) == 0 && a.pozz > b.pozz;} int comp_tel1(poz a , poz b){return strcmp(a.tel , b.tel) > 0 || strcmp(a.tel , b.tel) == 0 && a.pozz > b.pozz;} int comp_email1(poz a , poz b){return strcmp(a.email , b.email) > 0 || strcmp(a.email , b.email) == 0 && a.pozz > b.pozz;} int comp_fct1(poz a , poz b){return strcmp(a.fct , b.fct) > 0 || strcmp(a.fct , b.fct) == 0 && a.pozz > b.pozz;} int comp_salariu1(poz a , poz b){return a.salariu > b.salariu || a.salariu == b.salariu && a.pozz > b.pozz;} int comp_varsta1(poz a , poz b){return a.varsta > b.varsta || a.varsta == b.varsta && a.pozz > b.pozz;} int main() { cin >> n; for(int i = 1 ; i <= n ; i++) { cin >> a[i].prenume >> a[i].nume >> a[i].salariu >> a[i].varsta >> a[i].fct >> a[i].tel >> a[i].email; a[i].pozz = i; } cin >> p >> c; if(c == '+') { if(p == 1) sort(a + 1 , a + n + 1 , comp_prenume); else if(p == 2) sort(a + 1 , a + n + 1 , comp_nume); else if(p == 3) sort(a + 1 , a + n + 1 , comp_salariu); else if(p == 4) sort(a + 1 , a + n + 1 , comp_varsta); else if(p == 5) sort(a + 1 , a + n + 1 , comp_fct); else if(p == 6) sort(a + 1 , a + n + 1 , comp_tel); else if(p == 7) sort(a + 1 , a + n + 1 , comp_email); for(int i = 1 ; i <= n ; i++) cout << a[i].prenume << " " << a[i].nume << " " << a[i].salariu << " " << a[i].varsta<< " " << a[i].fct << " " << a[i].tel << " " << a[i].email << '\n'; } else if(c == '-') { if(p == 1) sort(a + 1 , a + n + 1 , comp_prenume1); else if(p == 2) sort(a + 1 , a + n + 1 , comp_nume1); else if(p == 3) sort(a + 1 , a + n + 1 , comp_salariu1); else if(p == 4) sort(a + 1 , a + n + 1 , comp_varsta1); else if(p == 5) sort(a + 1 , a + n + 1 , comp_fct1); else if(p == 6) sort(a + 1 , a + n + 1 , comp_tel1); else if(p == 7) sort(a + 1 , a + n + 1 , comp_email1); for(int i = 1 ; i <= n ; i++) cout << a[i].prenume << " " << a[i].nume << " " << a[i].salariu << " " << a[i].varsta<< " " << a[i].fct << " " << a[i].tel << " " << a[i].email << '\n'; } }