Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2013, 00:16   #1
AnnNoob
Пользователь
 
Регистрация: 23.04.2013
Сообщений: 11
По умолчанию Поиск числа дубликатов в одномерном массиве

Есть массив чисел (у меня трехразрядные), отсортирован по возрастанию.
Нужно подсчитать колличество повторов.
Получиться должно так:
1 1 1 2 2 3 3 4 4 5 5 5 6 7 9 9 9 9
n[0]=2 (6,7)
n[1]=3 (2,3,4)
n[2]=2 (1,5)
n[3]=1 (9)
n[4]=...

т.е. 6 и 7 не имеют дубликатов, и таких чисел в массиве 2
2 3 4 имееют по одному дубликату, чисел с одним дубликатом в массиве 3 и т.д.

Пишу на делфи, но нужен только алгоритм или идеи по его реализации, или в псевдокоде.

Заранее спасибо!!!
AnnNoob вне форума Ответить с цитированием
Старый 23.04.2013, 07:15   #2
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Любопытная задача.
Правда, непонятно, зачем в условии указано, что массив отсортирован.
А "любопытность" состояит в том, что она решатся двумя проходами одного и того же алгоритма.
На первом проходе мы заносим во вспомогательный массив количество повторений каждого числа (индекс в массиве - это число). А на втором - точно так же проходим по вспомогательному массиву.

Можно, конечно, решать в один проход и без вспомогательного массива, но лично мне такое решение кажется менее изящным.
s-andriano вне форума Ответить с цитированием
Старый 23.04.2013, 09:20   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

так устроит?
Код:
procedure TForm1.Button1Click(Sender: TObject);
const SizeMas = 18;
const
  Mas : array[1..SizeMas] of integer = (1,1,1,2,2,3,3,4,4,5,5,5,6,7,9,9,9,9);
var i : integer;
  PrevNumber, CurCount : integer;
  n : array[0..SizeMas-1] of integer; {массив для результатов. можно использовать динамический массив}
begin
  {обнулим исходный массив счётчиков}
  for i:=0 to SizeMas-1 do n[i] := 0;

  PrevNumber := Mas[1];
  CurCount := 1;
  for i:=2 to SizeMas do
    if PrevNumber = Mas[i] then Inc(CurCount)
    else begin
      Inc( n[CurCount-1] );
      PrevNumber := Mas[i];
      CurCount := 1;
    end;
  Inc( n[CurCount-1] );

  {выведем результаты в Memo}
  Memo1.Lines.Clear;
  for i:=0 to SizeMas-1 do
    if n[i]>0 then Memo1.Lines.Append('n['+IntToStr(i)+'] = '+IntToStr(n[i]));

end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.04.2013, 18:15   #4
AnnNoob
Пользователь
 
Регистрация: 23.04.2013
Сообщений: 11
По умолчанию

огромное спасибо!
главное, колличество повторов сама додумалась посчитать, а дальше ступор) оказалось все очень просто)
AnnNoob вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бинарный(Двоичный) поиск в одномерном массиве bonjovi Паскаль, Turbo Pascal, PascalABC.NET 1 31.01.2012 17:10
В одномерном массиве выводятся одинаковые числа. Женька Good Помощь студентам 5 20.12.2011 21:52
[Pascal] Поиск минимума в одномерном массиве merch Паскаль, Turbo Pascal, PascalABC.NET 7 19.05.2011 02:35
Поиск дубликатов в массиве. Mister_Originalnos Помощь студентам 0 09.12.2010 20:13
Поиск в одномерном массиве Joxter Помощь студентам 6 13.12.2008 14:19