Форум программистов, компьютерный форум, киберфорум
Наши страницы
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
 
plzhelpme
0 / 0 / 1
Регистрация: 16.01.2018
Сообщений: 36
#1

Удалить из массива все элементы, встречаются менее трех раз - Pascal

18.01.2018, 10:25. Просмотров 93. Ответов 2
Метки нет (Все метки)

Дано целочисленный массив размера N. Удалить из массива все элементы, встречаются менее трех раз, и вывести размер полученного массива и его содержимое.
http://www.cyberforum.ru/pascal/thread19970.html
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.01.2018, 10:25
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Удалить из массива все элементы, встречаются менее трех раз (Pascal):

Удалить из массива числа, встречающиеся более трех раз
Дано N(1<=N<=1000) и N целых чисел. Удалить числа, встречающиеся более трех...

Отсортировать массив и вывести элементы массива, которые встречаются ровно K раз
Напишите программу, которая сортирует массив и выводит все элементы массива,...

Вложенные циклы. Найти все элементы массива, которые встречаются в нем ровно два раза
Дан целочисленный массив {ai}, i = 1, 2, ... , n. Найти все элементы массива, ...

Из массива A [7]: 4143190 удалить нечетные элементы, встречающиеся в массиве только один раз
Из массива A : 4143190 удалить нечетные элементы, встречающиеся в массиве...

Удалить из одномерного массива все элементы расположенные между максимальным и минимальным элементами массива
Удалить из одномерного массива все элементы расположенные между максимальным и...

2
ZX Spectrum-128
Модератор
Эксперт Pascal/Delphi
3857 / 2844 / 3631
Регистрация: 05.06.2014
Сообщений: 13,940
18.01.2018, 14:46 #2
http://www.cyberforum.ru/pascal/thread149650.html
0
bormant
Модератор
Эксперт Pascal/DelphiЭксперт NIX
3755 / 2452 / 2034
Регистрация: 22.11.2013
Сообщений: 6,821
18.01.2018, 23:19 #3
Лучший ответ Сообщение было отмечено plzhelpme как решение

Решение

Если диапазон значений массива невелик и известен, то можно сделать так.
Оставим в массиве только те элементы, что встречаются 3 и более раз.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
const nn=40; amn=1; amx=15; k=3;
var
  a: array [1..nn] of Integer;
  c: array [amn..amx] of Integer;
  i, j, n: Integer;
begin
  Randomize; n:=nn; {j:=0;}
  for i:=1 to n do a[i]:=amn+Random(amx-amn+1);
  Write('A ='); for i:=1 to n do Write(' ',a[i]); WriteLn;
  for i:=1 to n do Inc(c[a[i]]);
  for i:=1 to n do if c[a[i]]>=k then begin
    Inc(j); a[j]:=a[i];
  end; n:=j;
  Write('A''='); for i:=1 to n do Write(' ',a[i]); WriteLn;
  Write('Нажмите Enter...'); ReadLn;
end.
Добавлено через 15 минут
Если диапазон значений велик или неизвестен, то неоптимальное решение в лоб может быть таким:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const nn=40; amn=1; amx=15; kk=3;
var
  a: array [1..nn] of Integer;
  i, j, k, n, p: Integer;
begin
  Randomize; n:=nn; {j:=0;}
  for i:=1 to n do a[i]:=amn+Random(amx-amn+1);
  Write('A ='); for i:=1 to n do Write(' ',a[i]); WriteLn;
  for i:=1 to n do begin
    k:=1;
    p:=1; while (p<i) and (k<kk) do begin Inc(k,Ord(a[i]=a[p])); Inc(p); end;
    p:=n; while (p>i) and (k<kk) do begin Inc(k,Ord(a[i]=a[p])); Dec(p); end;
    if k>=kk then begin
      Inc(j); a[j]:=a[i];
    end;
  end; n:=j;
  Write('A''='); for i:=1 to n do Write(' ',a[i]); WriteLn;
  Write('Нажмите Enter...'); ReadLn;
end.
Но это довольно плохое решение (просмотров элементов N2).


В условии ничего не сказано про необходимость сохранять порядок следования элементов массива, поэтому допустимым решением должна быть сортировка массива и в один проход сохранение тех значений, которых больше 3 от текущего.

Добавлено через 29 минут
Пример с сортированным массивом может быть таким:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
const nn=10; kk=3;
  a: array [1..nn] of Integer = (1,1,1,1,2,3,3,3,4,4);
var
  i, j, k, n: Integer;
begin
  Randomize; n:=nn; {j:=0;}
  Write('A ='); for i:=1 to n do Write(' ',a[i]); WriteLn;
  i:=1; j:=1;
  while i<=n do begin
    k:=i+1; while (k<=n) and (a[k]=a[i]) do Inc(k);
    if k-i<kk then i:=k
    else while i<k do begin
      a[j]:=a[i]; Inc(j); Inc(i);
    end;
  end; n:=j-1;
  Write('A''='); for i:=1 to n do Write(' ',a[i]); WriteLn;
  Write('Нажмите Enter...'); ReadLn;
end.
Перенести a в раздел переменных и дописать сортировку -- задание для самостоятельной работы.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.01.2018, 23:19
Привет! Вот еще темы с решениями:

Удалить в строке слова, которые встречаются в ней указанное число раз
здравствуйте, необходимо срочно решить следующую задачу: удалить в строке...

Одномерные массивы: найти те элементы, которые встречаются одновременно во всех трех массивах
Заданы три одномерных массива содержащие по n элементов. Написать программу,...

Удалить все четные элементы массива
Удалить все четные элементы массива стоящие, на нечетных местах?

Удалить все отрицательные элементы массива
Люди добрые помогите решить задачки. Очень вас прошу... Буду очень благодарен!...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru