|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Теория - Расположить в последовательности числа в порядке убывания частоты встречаемости |
|
Теория - Расположить в последовательности числа в порядке убывания частоты встречаемости
|
Новый участник Сообщения: 21 |
Профиль | Отправить PM | Цитировать
Решено
|
|
Отправлено: 01:43, 21-05-2009 |
Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать #include <iostream> #include <map> #include <iterator> using namespace std; int main() { // контейнер для подсчёта map<int,unsigned> sym_count; // контейнер для сортировки map<unsigned,int> sym_sorted; // 1. берём числа из потока и считаем их повторения for(istream_iterator<int,char> first(cin), last; first!=last; ++first) { ++sym_count[*first]; } // 2. сортируем (пользуемся тем, что map всегда содержит сортированный список) for(map<int,unsigned>::iterator first(sym_count.begin()), last(sym_count.end()); first!=last; ++first) { sym_sorted[first->second] = first->first; } // 3. выводим на экран for(map<unsigned,int>::reverse_iterator first(sym_sorted.rbegin()), last(sym_sorted.rend()); first!=last; ++first) { cout << first->second << ": " << first->first << "\n"; } } Пример с использованием шаблонов перебора // достоинство - модульность (причём иерархическая) string output_format(const pair<unsigned,int>& a); struct calc_sym_count_t { map<int,unsigned> _count; void operator()(const int& n) { ++_count[n]; } }; struct sort_sym_t { map<unsigned,int> _sorted; void operator()(const pair<int,unsigned>& _count) { _sorted[_count.second] = _count.first; } }; string output_format(const pair<unsigned,int>& a) { ostringstream os; os << setw(10) << a.second << ": " << a.first; return os.str(); } int main() { calc_sym_count_t calc_sym_count; sort_sym_t sort_sym; // достоинство - лёгкость чтения: // для каждого от начала до конца посчитать кол-во символов for_each(istream_iterator<int,char>(cin), istream_iterator<int,char>(), calc_sym_count); // для каждого от начала до конца кол-ва символов сортировать for_each(calc_sym_count._count.begin(), calc_sym_count._count.end(), sort_sym); // преобразовать сортированные символы в поток вывода с использованием формата transform(sort_sym._sorted.rbegin(), sort_sym._sorted.rend(), ostream_iterator<string,char>(cout, "\n"), output_format_t); } |
Последний раз редактировалось pva, 21-05-2009 в 07:51. Отправлено: 07:21, 21-05-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать Цитата .::.DIMA.::.:
|
|
Отправлено: 07:36, 22-05-2009 | #3 |
Пользователь Сообщения: 126
|
Профиль | Сайт | Отправить PM | Цитировать Если кому на Delphi надо то вот:
var a:array[1..2,0..9] of integer; c:char; i,k,j:integer; begin for i:=0 to 9 do begin a[1,i]:=i; a[2,i]:=0; end; read(c); while c<>'.' do begin k:=ord(c)-ord('0'); a[2,k]:=a[2,k]+1; read(c); end; for i:=0 to 8 do for j:=i+1 to 9 do if a[2,i]>a[2,j] then begin k:=a[2,i]; a[2,i]:=a[2,j]; a[2,j]:=k; k:=a[1,i]; a[1,i]:=a[1,j]; a[1,j]:=k; end; for i:=0 to 9 do if a[2,i]<>0 then write(a[1,i]); readln; readln; end. |
Последний раз редактировалось Drongo, 24-05-2009 в 16:54. Причина: Сайт в профиль! Повторный инцидиент будет караться. Отправлено: 16:32, 24-05-2009 | #4 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - Esc-последовательности в BAT-файлах (ansi.sys) | AndreyY89 | Microsoft Windows 2000/XP | 8 | 16-03-2012 07:05 | |
Драйвер - Как расположить панель задач на двух мониторах? | Alex-Rexy | Microsoft Windows 7 | 2 | 27-01-2010 11:46 | |
[решено] MsgBox. Как расположить текст в столбик? | Firebolt | AutoIt | 5 | 26-05-2009 23:35 | |
ASCII-последовательности | lunas | Программирование и базы данных | 2 | 09-02-2003 23:54 | |
ASCII-последовательности | lunas | Хочу все знать | 6 | 05-02-2003 14:24 |
|