powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Удаление и сортировка чисел в массиве
13 сообщений из 13, страница 1 из 1
Удаление и сортировка чисел в массиве
    #38425206
ackisha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть задачка:
Даны N положительных целых чисел, которые не делятся ни на какие простые числа, кроме 2 и 3. Требуется выкинуть минимально возможное количество чисел так, чтобы из любых двух оставшихся одно делилось на другое.
Никак не могу понять алгоритм действий(
Как можно решить эту задачку?
Помогите, пожалуйста!
...
Рейтинг: 0 / 0
Удаление и сортировка чисел в массиве
    #38425340
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забудь на время о компьютере. Сделай эту задачу на бумажке. Покажи нам всем бумажное решение.
После этого все будет легко.

Модератор: Тема перенесена из форума "C++".
...
Рейтинг: 0 / 0
Удаление и сортировка чисел в массиве
    #38425345
ackisha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl,
Вся проблема в том, что я даже не знаю, с чего начать её решать(
...
Рейтинг: 0 / 0
Удаление и сортировка чисел в массиве
    #38425370
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Строишь дерево, где потомок делится на родителя нацело. И берёшь самую длинную ветку.
...
Рейтинг: 0 / 0
Удаление и сортировка чисел в массиве
    #38425759
ackisha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
Мы не проходили еще деревьев, почитала в интернете - ничего особо не поняла(
...
Рейтинг: 0 / 0
Удаление и сортировка чисел в массиве
    #38425799
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ладно, описываю подробно.
Сортируем числа по возрастанию. Обрабатывать их будем именно в порядке возрастания, создавая цепочки.
Берём очередное число. Для каждой уже имеющейся цепочки ищем наибольший член цепочки, на который это число делится без остатка.
Если такой член цепочки последний в ней - то делаем копию цепочки и присоединячем к ней копию числа. Если он не последний - копируем только часть цепочки. Если такого не нашлось - ну не судьба...
Если число не было присоединено ни к одной из цепочек - создаём ещё одну цепочку, с этим числом как единственным членом.
По завершении обработки всех чисел имеем все наборы, для которых выполняется требуемое условие. Берём наиболее длинную цепочку.
...
Рейтинг: 0 / 0
Удаление и сортировка чисел в массиве
    #38426195
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имеет смысл попробовать динамическое программирование на матрице,
в ячейках которой стоит количество чисел,
в разложении которых встречается соответствующее число двоек и троек
...
Рейтинг: 0 / 0
Удаление и сортировка чисел в массиве
    #38427441
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ackishaчтобы из любых двух оставшихся одно делилось на другое.

Я, пожалуй, уточню: требуется, чтобы выполнялось a % b = 0 && b % a == 0 или a % b == 0 || b % a == 0?
...
Рейтинг: 0 / 0
Удаление и сортировка чисел в массиве
    #38428362
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
type
  TNumbers= array of integer;

function MaxSet(Numbers: TNumbers): TNumbers;
type
  TElement= record
    Number, Count, Total: integer;
    end;
var
  Matrix: array[0..31, 0..31] of TElement;
  i, j, k, n, t2, t3: integer;
begin;
  for j:=0 to High(Matrix) do for k:=0 to High(Matrix[0]) do Matrix[j,k].Count:=0;
  for i:=0 to Length(Numbers)-1 do begin;
    n:=Numbers[i];
    j:=0;
    while n and 1=0 do begin;
      n:=n shr 1; inc(j);
      end;
    k:=0;
    while n<>1 do begin;
      n:=n div 3; inc(k);
      end;
    inc(Matrix[j,k].Count);
    Matrix[j,k].Number:=Numbers[i];
    end;
  Matrix[0,0].Total:=Matrix[0,0].Count;
  for j:=1 to High(Matrix) do Matrix[j,0].Total:=Matrix[j-1,0].Total + Matrix[j,0].Count;
  for k:=1 to High(Matrix[0]) do Matrix[0,k].Total:=Matrix[0,k-1].Total + Matrix[0,k].Count;
  for j:=1 to High(Matrix) do for k:=1 to High(Matrix[0]) do begin;
    t2:=Matrix[j-1,k].Total + Matrix[j,k].Count;
    t3:=Matrix[j,k-1].Total + Matrix[j,k].Count;
    if t3<t2 then t3:=t2;
    Matrix[j,k].Total:=t3;
    end;
  j:=High(Matrix);
  k:=High(Matrix[0]);
  i:=Matrix[j,k].Total;
  SetLength(Result,i);
  while i<>0 do begin;
    n:=Matrix[j,k].Count;
    while n>0 do begin;
      dec(n); dec(i); Result[i]:=Matrix[j,k].Number;
      end;
    if (j>0) and (Matrix[j-1,k].Total=i) then dec(j) else dec(k);
    end;
  end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Numbers, Numbers2: TNumbers;
  i, j, n: integer;
begin;
  Randomize;
  Memo1.Lines.Clear;
  Memo2.Lines.Clear;
  n:=StrToIntDef(Edit1.Text,0);
  if n<=0 then exit;
  SetLength(Numbers,n);
  Memo1.Lines.Add(IntToStr(Length(Numbers))+' сгенерировано:');
  for i:=0 to Length(Numbers)-1 do begin;
    n:=1;
    for j:=0 to Random(8)-1 do n:=n*(2+Random(2));
    Numbers[i]:=n;
    Memo1.Lines.Add(IntToStr(n));
    end;
  Numbers2:=MaxSet(Numbers);
  Memo2.Lines.Add(IntToStr(Length(Numbers2))+' осталось:');
  for i:=0 to Length(Numbers2)-1 do Memo2.Lines.Add(IntToStr(Numbers2[i]));
  end;
...
Рейтинг: 0 / 0
Удаление и сортировка чисел в массиве
    #38433593
ackisha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aleksandr Sharahov,
Спасибо большое, а нельзя ли с комментариями, а то немного трудно разобраться в чужом коде?
...
Рейтинг: 0 / 0
Удаление и сортировка чисел в массиве
    #38435083
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ackisha,

если вы проходили динамическое программирование,
то все должно быть более-менее понятно.

Или задавайте вопрос конкретнее, отвечу.
...
Рейтинг: 0 / 0
Удаление и сортировка чисел в массиве
    #38442181
ackisha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aleksandr Sharahov,

Динамического программирования касались, но очень поверхностно, и на паскале
...
Рейтинг: 0 / 0
Удаление и сортировка чисел в массиве
    #38442409
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ackisha,

Значит, придется вникнуть и разобраться в теме по учебнику.

Задачу облегчает то, что выше приведенно решение на Delphi.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Удаление и сортировка чисел в массиве
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]