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

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

Я, пожалуй, уточню: требуется, чтобы выполнялось a % b = 0 && b % a == 0 или a % b == 0 || b % a == 0?
...
Рейтинг: 0 / 0
15.10.2013, 15:29
    #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
18.10.2013, 23:17
    #38433593
ackisha
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление и сортировка чисел в массиве
Aleksandr Sharahov,
Спасибо большое, а нельзя ли с комментариями, а то немного трудно разобраться в чужом коде?
...
Рейтинг: 0 / 0
21.10.2013, 09:59
    #38435083
Aleksandr Sharahov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление и сортировка чисел в массиве
ackisha,

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

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

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

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

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


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