Теория - Расположить в последовательности числа в порядке убывания частоты встречаемости
-
.::.DIMA.::.
Re: Теория - Расположить в последовательности числа в порядке убывания частоты встречаемости
Код:
Есть ещё варианты с явной сортировкой, то есть скопировать загруженный map в list и отсортировать его по критерию.
Пример с использованием шаблонов перебора
Код:
Код: Выделить всё
#include
#include
#include
using namespace std;
int main()
{
// контейнер для подсчёта
map sym_count;
// контейнер для сортировки
map sym_sorted;
// 1. берём числа из потока и считаем их повторения
for(istream_iterator first(cin), last; first!=last; ++first)
{
++sym_count[*first];
}
// 2. сортируем (пользуемся тем, что map всегда содержит сортированный список)
for(map::iterator first(sym_count.begin()), last(sym_count.end()); first!=last; ++first)
{
sym_sorted[first->second] = first->first;
}
// 3. выводим на экран
for(map::reverse_iterator first(sym_sorted.rbegin()), last(sym_sorted.rend()); first!=last; ++first)
{
cout second Есть ещё варианты с явной сортировкой, то есть скопировать загруженный map в list и отсортировать его по критерию.
Пример с использованием шаблонов перебора
Код:
Код: Выделить всё
// достоинство - модульность (причём иерархическая)
string output_format(const pair& a);
struct calc_sym_count_t
{
map _count;
void operator()(const int& n)
{
++_count[n];
}
};
struct sort_sym_t
{
map _sorted;
void operator()(const pair& _count)
{
_sorted[_count.second] = _count.first;
}
};
string output_format(const pair& a)
{
ostringstream os;
os -
virus-smal
Re: Теория - Расположить в последовательности числа в порядке убывания частоты встречаемости
Если кому на 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.