#include
#include
#include
#include
using namespace std;
struct Learner {
int number;
vector results;
string name;
Learner() : number(0) {}
Learner(int number, const vector& results, const string& name)
: number(number), results(results), name(name) {}
private:
size_t answers()const {
auto compare = [](short x) { return x != 0; };
return count_if(results.begin(), results.end(), compare);
}
friend bool operator<(const Learner& a, const Learner& b) {
if (a.number < b.number) return true;
if (a.number == b.number) {
auto equals = a.answers() == b.answers();
if (!equals) return a.answers() > b.answers();
return a.name < b.name;
}
return false;
}
friend ostream& operator<<(ostream& out, const Learner& learner) {
out << left << setw(30) << learner.name << "Школа № " << learner.number;
out << ". Результаты: ";
const auto result = learner.answers();
if (!result) puts(" не решил");
else {
out << result << " решени";
switch (result) {
case 1: puts("е"); break;
case 5: puts("й"); break;
default: puts("я");
}
}
return out;
}
};
class TestResults {
public:
void add(Learner&& lerner) {
table.emplace_back(move(lerner));
}
void add(const Learner& lerner) {
table.push_back(lerner);
}
void order() {
sort(table.begin(), table.end());
}
void show()const {
for (const auto& record : table) cout << record;
}
private:
vector table;
};
int main() {
TestResults results;
results.add({ 1, { 1, 0, 1, 1, 0 }, "Анисин С. В." });
results.add({ 3, { 0, 1, 1, 1, 1 }, "Бобров Е. Ф." });
results.add({ 1, { 1, 1, 1, 1, 1 }, "Волков И. И." });
results.add({ 2, { 0, 0, 0, 0, 0 }, "Горбонос А. С." });
results.add({ 1, { 1, 0, 0, 0, 1 }, "Иванова Т. В." });
results.add({ 3, { 1, 0, 1, 0, 1 }, "Кадочников В. Р." });
results.add({ 4, { 1, 1, 1, 1, 1 }, "Кац С. Я." });
results.add({ 3, { 1, 1, 0, 1, 1 }, "Санина И. М." });
results.add({ 4, { 1, 1, 1, 0, 0 }, "Тимофеева-Летуновская И. Т." });
results.add({ 4, { 1, 1, 0, 0, 1 }, "Хромов А. К." });
results.add({ 4, { 1, 0, 1, 0, 1 }, "Хромова Е. К." });
results.add({ 2, { 0, 0, 0, 0, 1 }, "Щукина Т. Н." });
Learner danilov{ 2, { 1, 0, 1, 1, 1 }, "Данилов Г. В. " };
results.add(danilov);
results.order();
results.show();
}
#include
#include
#include
struct Student {
std::string lastName;
int schoolNumber;
std::vector answers;
};
bool compareStudents(const Student& student1, const Student& student2) {
int solved1 = std::count(student1.answers.begin(), student1.answers.end(), 1);
int solved2 = std::count(student2.answers.begin(), student2.answers.end(), 1);
return solved1 > solved2;
}
int main() {
std::vector students;
// Добавление учеников и их ответов на задачи
students.push_back({ "Иванов", 1, { 1, 0, 1, 0, 1 } });
students.push_back({ "Петров", 2, { 1, 1, 0, 1, 0 } });
students.push_back({ "Сидоров", 1, { 0, 0, 1, 1, 1 } });
students.push_back({ "Смирнов", 3, { 0, 1, 0, 1, 0 } });
students.push_back({ "Кузнецов", 2, { 1, 1, 1, 1, 1 } });
// Сортировка учеников по количеству решенных задач
std::sort(students.begin(), students.end(), compareStudents);
// Вывод списка учеников по школам
int currentSchool = 0;
for (const auto& student : students) {
if (student.schoolNumber != currentSchool) {
currentSchool = student.schoolNumber;
std::cout << "Школа " << currentSchool << ":\n";
}
std::cout << student.lastName << std::endl;
}
return 0;
}
#include
#include
#include
#include
struct Student {
std::string lastName;
int schoolNumber;
int solvedProblems;
};
bool compareStudents(const Student& student1, const Student& student2) {
return student1.solvedProblems > student2.solvedProblems;
}
int main() {
// Создаем вектор студентов
std::vector students;
// Заполняем информацию о студентах (фамилия, номер школы, количество решенных задач)
students.push_back({"Иванов", 1, 3});
students.push_back({"Петров", 1, 4});
students.push_back({"Сидоров", 2, 5});
students.push_back({"Смирнов", 2, 2});
students.push_back({"Козлов", 3, 1});
students.push_back({"Васильев", 3, 3});
// Сортируем студентов по количеству решенных задач
std::sort(students.begin(), students.end(), compareStudents);
// Выводим отсортированный список студентов
std::cout << "Списки учеников по школам:\n";
int currentSchoolNumber = -1;
for (const auto& student : students) {
if (student.schoolNumber != currentSchoolNumber) {
std::cout << "Школа " << student.schoolNumber << ":\n";
currentSchoolNumber = student.schoolNumber;
}
std::cout << student.lastName << " - " << student.solvedProblems << " задач\n";
}
return 0;
}
Программа создает структуру Student, содержащую информацию о фамилии студента, номере школы и количестве решенных задач. Затем создается вектор students, в котором хранится информация о каждом ученике.