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ă
care valoarea+, ordonarea va fi crescătoare, iar dacăcare 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
255de 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';
}
}