Теория - Расположить в последовательности числа в порядке убывания частоты встречаемости

Ответить
Аватара пользователя
.::.DIMA.::.

Re: Теория - Расположить в последовательности числа в порядке убывания частоты встречаемости

Сообщение .::.DIMA.::. »

Код:

Код: Выделить всё

#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 
Аватара пользователя
pva

Re: Теория - Расположить в последовательности числа в порядке убывания частоты встречаемости

Сообщение pva »

Цитата .::.DIMA.::.:



это нужно написать на assembler
»




как вариант - откомпилируй и дизассемблируй
Аватара пользователя
virus-smal

Re: Теория - Расположить в последовательности числа в порядке убывания частоты встречаемости

Сообщение virus-smal »

Если кому на 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.
Ответить

Вернуться в «Программирование и базы данных»