Однажды, неловкая секретарша перепутала личные дела учащихся. Теперь их снова необходимо упорядочить сначала по классам, а внутри класса по фамилиям.
Входные данные
В первой строке дано число N (1 ≤ N ≤ 1000) – количество личных дел. Далее для каждого из N учащихся следующие данные (каждое в своей строке): фамилия и имя, класс, дата рождения. Фамилия и имя – строки не более чем из 20 символов, класс – строка состоящая из числа (от 1 до 11) и латинской буквы (от "A" до "Z"), дата рождения – дата в формате "ДД.ММ.ГГ". Гарантируется, что внутри одного класса нет однофамильцев.
Выходные данные
В выходной файл требуется вывести N строк, в каждой из которых записаны данные по одному учащемуся. Строки должны быть упорядочены сначала по классам, а затем по фамилиям.
#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;
struct STUDENT
{
string Name, Surname;
char Letter;
short int Class;
int Day, Month, Year;
};
bool operator>(const STUDENT &a, const STUDENT &b)
{
bool res=false;
if (a.Class>b.Class) res=true;
else if (a.Class==b.Class)
if (a.Letter>b.Letter) res=true;
else if (a.Letter==b.Letter)
if (a.Surname>b.Surname) res=true;
else if (a.Surname==b.Surname)
if (a.Name>b.Name) res=true;
return res;
};
void swap(STUDENT &a, STUDENT &b)
{
STUDENT temp;
temp=a;
a=b;
b=temp;
}
void scandate(int &day, int &month, int &year)
{
string temp;
cin >> temp;
day = atoi(temp.substr(0,2).c_str());
month = atoi(temp.substr(3,2).c_str());
year = atoi(temp.substr(6,2).c_str());
}
void z(int k)
{
if (k>9) cout << k;
else cout << "0" << k;
}
int main()
{ int n;
cin >> n;
STUDENT *a = new STUDENT [n];
for (int i=0; i<n; i++)
{
cin >> a[i].Surname >> a[i].Name >> a[i].Class >> a[i].Letter;
scandate(a[i].Day, a[i].Month, a[i].Year);
}
for (int k=2; k<=n; k++)
for (int i=0; i<=n-k; i++)
if (a[i]>a[i+1]) swap(a[i], a[i+1]);
for ( int i=0; i<n; i++)
{cout << a[i].Class << a[i].Letter << " " << a[i].Surname << " " << a[i].Name << " ";
z(a[i].Day);
cout <<".";
z(a[i].Month);
cout << ".";
z(a[i].Year);
cout << endl;}
delete [] a;
return 0;
}
Есть решение которого нет на сайте? Пиши admin@devexe.top