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 lentxoxo@lesbos.com Oliver Regina 0 37 Vigilante 1234567890 mynameisoliverqueen@starcity.com Sterling Archer 1000000 43 Agent 8423565491 ageofconsentis14inalabamaofeurope@isis.com 2 +
Ieșire
Sterling Archer 1000000 43 Agent 8423565491 ageofconsentis14inalabamaofeurope@isis.com Oliver Regina 0 37 Vigilante 1234567890 mynameisoliverqueen@starcity.com Len Trexler 100000 55 Spymaster 5554440192 lentxoxo@lesbos.com
Explicație
S-a sortat crescător după nume(2), și s-au afișat.
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema Baza De Date:
#include<bits/stdc++.h>
using namespace std;
struct data
{
string prenume,nume,functie,email,numar;
unsigned long long salariu,varsta;
};
data d[1001];
int p;
char c;
bool comp(data i,data j)
{
if(c=='-')
{
if(p==1)
if(i.prenume>j.prenume)
return 1;
if(p==2)
if(i.nume>j.nume)
return 1;
if(p==3)
if(i.salariu>j.salariu)
return 1;
if(p==4)
if(i.varsta>j.varsta)
return 1;
if(p==5)
if(i.functie>j.functie)
return 1;
if(p==6)
if(i.numar>j.numar)
return 1;
if(p==7)
if(i.email>j.email)
return 1;
}
else
{
if(p==1)
if(i.prenume<j.prenume)
return 1;
if(p==2)
if(i.nume<j.nume)
return 1;
if(p==3)
if(i.salariu<j.salariu)
return 1;
if(p==4)
if(i.varsta<j.varsta)
return 1;
if(p==5)
if(i.functie<j.functie)
return 1;
if(p==6)
if(i.numar<j.numar)
return 1;
if(p==7)
if(i.email<j.email)
return 1;
}
return 0;
}
int main()
{
string s;
int n,k=0;
cin>>n;
cin.get();
for(int i=1;i<=n;i++)
{
getline(cin,s);
vector<string> v;
istringstream buffer(s);
for(string w;buffer>>w;)
v.push_back(w);
for(int j=0;j<v.size();j++)
switch(j)
{
case 0: d[k].prenume=v[j]; break;
case 1: d[k].nume=v[j]; break;
case 2: d[k].salariu=stoull(v[j]); break;
case 3: d[k].varsta=stoull(v[j]); break;
case 4: d[k].functie=v[j]; break;
case 5: d[k].numar=v[j]; break;
case 6: d[k].email=v[j]; break;
}
k++;
}
cin>>p>>c;
stable_sort(d,d+k,comp);
for(int i=0;i<k;i++)
cout<<d[i].prenume<<" "<<d[i].nume<<" "<<d[i].salariu<<" "<<d[i].varsta<<" "<<d[i].functie<<" "<<d[i].numar<<" "<<d[i].email<<'\n';
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #2736 Baza De Date
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2736 Baza De Date de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!