0 / 0 / 0
Регистрация: 16.01.2018
Сообщений: 46
1

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

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

Дано целочисленный массив размера N. Удалить из массива все элементы, встречаются менее трех раз, и вывести размер полученного массива и его содержимое.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.01.2018, 10:25
Ответы с готовыми решениями:

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

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

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

Удалить из массива все элементы встречающиеся более 2х раз
Решить задачу, оформив решение в виде процедур генерации, вывода и обработки массива. Дан...

2
Эксперт Pascal/Delphi
6804 / 4563 / 4817
Регистрация: 05.06.2014
Сообщений: 22,438
18.01.2018, 14:46 2
Одномерный и двумерный массив
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7520 / 4384 / 2781
Регистрация: 22.11.2013
Сообщений: 12,545
Записей в блоге: 1
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.01.2018, 23:19
Помогаю со студенческими работами здесь

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

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

Дана строка. Удалить из строки все символы которые встречаются в ней только один раз
Помогите решить пожалуйста задачу. Дана строка. Удалить из строки все символы которые встречаются в...

Если массив содержит не менее трех четных элементов, то увеличить положительные элементы массива на 5
Ввести массив A(n).Если массив содержит не менее трех четных элементов, то увеличить положительные...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru