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

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

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

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

Удалить из массива все элементы, встречающиеся менее двух раз.
1. Дан целочисленный массив размера N. Удалить из массива все элементы, встречающиеся менее двух...

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

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

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

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

2
ZX Spectrum-128
Модератор
Эксперт Pascal/Delphi
3876 / 2861 / 3636
Регистрация: 05.06.2014
Сообщений: 14,055
18.01.2018, 14:46 2
Одномерный и двумерный массив
0
bormant
Модератор
Эксперт Pascal/DelphiЭксперт NIX
3890 / 2552 / 2080
Регистрация: 22.11.2013
Сообщений: 7,121
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