Ещё одна задача, подобную решал ранее. Добавил комментариев в код, для понятности.
Условие
В командных олимпиадах по программированию для решения предлагается не более 12 задач. Команда может решать предложенные задачи в любом порядке. Подготовленные решения команда посылает в единую проверяющую систем соревнований. Вам предлагается написать эффективную, в том числе и по используемой памяти, программу, которая будет статистически обрабатывать пришедшие запросы на проверку, чтобы определить популярность той или иной задачи. Следует учитывать, что количество запросов в списке может быть очень велико, например, когда олимпиада проводится через Интернет. перед текстом программы кратко опишите используемый вами алгоритм решения задачи. На вход программе в первой строчке подается количество пришедших запросов N. В каждой из последующих N строк записан номер задачи от 1 до 12. Пример входных данных:
6
1
2
1
1
5
2
Программа должна вывести список всех задач, встречающихся в запросах, в порядке возрастания (неубывания) количества запросов по ней с указанием этого количества запросов. Каждая задача должна быть выведена только один раз. Пример выходных данных для приведенных входных данных:
5 1
2 2
1 3
Решение
#include <stdio.h> #include <iostream> #include <string.h> struct info { int id, count; } array[12]; int main() { memset(array, 0, 12 * sizeof(info)); // обнуляем массив array int N, tmp, found = 0; scanf("%d", &N); for (int i = 0; i < N; i++) { scanf("%d", &tmp); // если число есть в массиве, то мы увеличиваем его count на 1, а не добавляем новый элемент for (int j = 0; j < N; j++) { if (array[j].id == tmp) { array[j]. count++; found = 1; } } // если числа нет в массиве, то добавим его if (found == 0) { array[i].id = tmp; array[i].count = 1; } found = 0; } // сортируем массив методом пузырька for (int i = 0; i < N; i++) { for (int j = 0; j < N-1; j++) { if (array[j].count > array[j+1].count) { std::swap(array[j], array[j+1]); } } } // выводим for (int i = 0; i < N; i++) { if (array[i].count != 0) { printf("%d %d\n", array[i].id, array[i].count); } } return 0; }