Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Теория - Расположить в последовательности числа в порядке убывания частоты встречаемости

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

Новый участник


Сообщения: 21
Благодарности: 1

Профиль | Отправить PM | Цитировать


Изменения
Автор: .::.DIMA.::.
Дата: 16-03-2013
Решено

Отправлено: 01:43, 21-05-2009

 
pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить 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";
  }
}
Есть ещё варианты с явной сортировкой, то есть скопировать загруженный map в list и отсортировать его по критерию.
Пример с использованием шаблонов перебора
Код: Выделить весь код
// достоинство - модульность (причём иерархическая)
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



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Цитата .::.DIMA.::.:
это нужно написать на assembler »
как вариант - откомпилируй и дизассемблируй
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:36, 22-05-2009 | #3


Пользователь


Сообщения: 126
Благодарности: 16

Профиль | Сайт | Отправить 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



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Теория - Расположить в последовательности числа в порядке убывания частоты встречаемости

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - 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




 
Переход