Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.12.2012, 21:35   #1
Anna Kern
Новичок
Джуниор
 
Регистрация: 04.12.2012
Сообщений: 1
По умолчанию задачи в турбо паскаль

Помогите, пожалуйста, на завтра нужно решить, голова уже взрывается, от программирования...

1.Первая вообще чушь какая-то, кто такие придумывает?

Все мы знаем, мафия бессмертна, но бороться с ней необходимо. Мафия организована так, что каждый ее член знает только своего непосредственно босса. ГРОМ поручил МОЗГу непростое задание. Зашифровав каждого известного члена мафии числом, будет передана имеющаяся информация о связях подчиненный-босс. Информация конечно не полная, но уже кое-что. Из этих членов банды есть те, контроль над которыми необходимо устранить, убрав их общего босса (босс босса является боссом). Но чем выше по иерархии мы ползем, тем сложнее устранить этого главаря. Поэтому нам необходим самый слабый, среди боссов. Если можно устранить босса ниже по иерархии для достижения поставленной цели, то он то нам и нужен.
Формат входного файла
В первой строке даны три целых числа N (1 <= N <= 1000), K (1<= 1000 <= K), M
(1 <= M <= 1000). N — количество выданных нам номеров мафиози.
В следующей строке K чисел — номера мафиози, которых необходимо отрезать от управления главарем.
В следующих M строках по паре чисел A, B. A — босс, B — подчиненный. (0 <= A, B < N)
Формат выходного файла
Номер мафиози, которого необходимо устранить, либо -1, если переданной информации недостаточно, чтобы его определить.

2. Дана строка из заглавных латинских букв. Необходимо дополнить ее справа минимальным количеством букв так, чтобы строка превратилась в палиндром, и вывести результат.
Формат входного файла
В единственной строке дана строка S длинной до 1000 символов из заглавных латинских букв.
Формат выходного файла
Выведите строку-палиндром, полученную из S путем добавления латинских букв в хвост.

пожалуйста, помогите
Anna Kern вне форума Ответить с цитированием
Старый 04.12.2012, 22:35   #2
MihalNik
МегаМодератор
СуперМодератор
 
Регистрация: 27.11.2012
Сообщений: 5,657
По умолчанию

Мафия... Для каждой пары:
Если подчиненного надо отрезать то
если найдется еще одна пара с тем же главарем и надо отрезать подчиненного - удаляете пару из списка,
иначе главарь становится тем кого надо отрезать, а пару тоже удаляете из списка.
Повторять многократно. Если останется одна единственная пара отрезать-главарь - ему и конец, иначе -1. (всех, кого надо отрезать - только главари)
Благими намерениями устлана дорога на programmersforum.ru
MihalNik вне форума Ответить с цитированием
Старый 04.12.2012, 23:22   #3
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Вторую задачу можно сделать так:
1. В цикле (до обнаружения конца файла)
Читаем исходный файл символами.
Прочитанный символ пишем в новый файл.
Прочитанный символ помещаем в стек.
Конец цикла.
2. В цикле (до обнаружения конца стека)
Считываем символ с вершины стека.
Пишем символ в выходной файл.
Конец цикла.
3. Закрываем выходной файл.

Пример: Если строка была из символов: абсд1234, то на выходе получим:
абсд12344321дсба, которая одинаково читается с обеих сторон (палиндром)

Вроде так ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 04.12.2012, 23:26   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

ViktorR, "ее справа минимальным количеством букв".

Мое предложение, но для Тубро Паскаля не подойдет (у него ограничение на 255 символов в строке, вроде):
1) Считываем строку
2) Рассматриваем символ, который располагается посередине строки (пример: абвг, абвгд - красным выделены символы, с которых начинать рассмотрение)
3) Начинаем идти от этого символа в разные стороны и сравнивать символы
4) Если нашли разные - берем символ правее и повторяем 2-4, иначе (дошли до самого правого символа) печатаем исходную строку и все символы левее последнего левого рассмотренного символа

Наброски (вполне могут заработать и в Турбо Паскале):
Код:
function palindrome(s: string): string;
var
  len, p, i, j: integer;
  stmp: string;
begin
  len := length(s);
  if len = 0 then
  begin
    palindrome := '';
    exit;
  end;
  p := len div 2 + 1;
  i := 0;
  repeat
    while (p + i <= len) and (s[p - i] = s[p + i]) do
      inc(i);
    if p + i <= len then
    begin
      inc(p);
      i := 0;
    end;
  until (p + i > len);
  stmp := s;
  for j := p - i downto 1 do
    stmp := stmp + s[j];
  palindrome := stmp;
end;
Цитата:
Но массив то из 1000 символов можно определить
Вы правы, но теперь это забота ТС
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 04.12.2012 в 23:48.
BDA вне форума Ответить с цитированием
Старый 04.12.2012, 23:33   #5
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Да! Тут я того ...
Все куда как сложней ...

Цитата:
Мое предложение, но для Тубро Паскаля не подойдет (у него ограничение на 255 символов в строке, вроде):
Но массив то из 1000 символов можно определить. А при необходимости - динамические структуры, см. первую задачу.
Как-то так, ...

Последний раз редактировалось ViktorR; 04.12.2012 в 23:38.
ViktorR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задачи. Турбо паскаль. Virusyaga Паскаль, Turbo Pascal, PascalABC.NET 9 05.12.2012 22:25
Задачи (Турбо-Паскаль) Rast[bI]4* Помощь студентам 0 22.02.2012 23:16
задачи на файлы в турбо паскаль rewq_q Помощь студентам 1 14.11.2010 16:29