![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Jekaterina |
![]()
Сообщение
#1
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 61 Пол: Женский Реальное имя: Jekaterina Lauce Репутация: ![]() ![]() ![]() |
Доброй ночи! Не справляюсь с задачей: "В стране Н. пользуются порталом "Друзья". Во входном файле в первой строке дается номер максимально возмоной персоны, ниже приведены пары друзей, например:
15 2 4 6 11 2 13 13 2 4 14 Запись 2 4 означает, что персона 2 является другом персоны 4, и т. д. Друзья объединяются в множество друзей: например, из пар 2 4 и 2 13 образуется множество друзей {2, 4, 13}. Цель-отыскать наибольшее множество друзей и вывести его в выходной файл. Я думаю, здесь нужно использовать массив множеств, но не знаю, как правильно описать переменные (такая структура мне раньше не попадалась). Сам алгоритм мне тоже не ясен - может быть, кто-то из вас поймет, как использовать этот максимальный номер в первой строке? (надеюсь, динамические переменные здесь можно не использовать-я с ними пока крайне слабо знакома, а разобраться в решении хочется ![]() |
![]() ![]() |
Bokul |
![]()
Сообщение
#2
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: ![]() ![]() ![]() |
Цитата Во входном файле в первой строке дается номер максимально возмоной персоны Т.е. все количество людей? Пара вопросов: 1 Является ли дружба взаимной? Т.е. в твоем случае является ли 4 другом 2? 2 Какие множества будут в таком случае?
-------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
Jekaterina |
![]()
Сообщение
#3
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 61 Пол: Женский Реальное имя: Jekaterina Lauce Репутация: ![]() ![]() ![]() |
В первой строке максимально возможный номер друга, который может быть указан в дружественных парах, напр.,
3 1 2 2 3 (друга с номером больше 3 указывать нельзя). Дружба взаимна. В приведенном вами примере решение таково: 3 (т.к. имеются 2 одинаково длинных компании 1 2 22 и 3 4 44, больше компании создать нельзя) (друга с номером больше тройки указывать нельзя)- т.е. в файле не будут друзья под номерами 4,5,6,...,а только 1,2,3 (не обязательно подряд или все номера) .При этом записи могут дублироваться. |
мисс_граффити |
![]()
Сообщение
#4
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
такая структура делается без проблем:
type druzia=set of byte; но толку от нее не много... я поставила размерность массива 5, а у тебя она заранее неизвестно какой окажется. видимо, все же придется работать с динамическими структурами, если вы их проходили... или делать очень большой массив (чтобы наверняка хватило). небольшой нюанс: входной файл - текстовый? по алгоритму... можно так: считали из файла мн-во. есть пересечения с первым, записанным в массив? добавили считанное к первому. со вторым? ... если нет ни одного - записали в новую ячейку. если есть сразу с несколькими - объединили их. а потом считаем кол-во эл-тов, входящих в множество. вот здесь нам и понадобится номер персоны. -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
Jekaterina |
![]()
Сообщение
#5
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 61 Пол: Женский Реальное имя: Jekaterina Lauce Репутация: ![]() ![]() ![]() |
Файл текстовый, но с динамическими структурами не слажу - нет опыта.
|
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
А откуда, ты думаешь, он возьмется, опыт-то? Проснешься одним утром, и... "Вот он, опыт, во сне пришел!!" Так что-ли?
![]() Пока не начнешь использовать динамику в своих программах - так и не будет понимания и опыта использования... |
Jekaterina |
![]()
Сообщение
#7
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 61 Пол: Женский Реальное имя: Jekaterina Lauce Репутация: ![]() ![]() ![]() |
Беда в том, что я программирую вообще только 5 месяцев и при этом работаю в школе учителем математики. Времени не хватает освоить все как следует. Пошла в университет - мне интересна информатика. Мне еще повезло. Рядом за партами сидят бывшие музыканты, биологи, почти все старше в 1,5-2 раза *(в Латвии большая нехватка учителей, потому такой бардак). Педагоги с одной стороны понимают уровень основной массы студентов, с другой - дают такие задания, которые человеку с никаким опытом программирования не решить. Я не жалуюсь-мне нравится паскаль, я сама пытаюсь ковыряться в с, питоне-просто чтоб хоть представление иметь. Проблема такова, что со своими 37 уроками в неделю,2 детьми,2 классными руководствами до динамических структур данных я смогу добраться только к лету-если буду заниматься как сейчас, ночью и на каникулах. Простите, что ответ длинный получился и немного личный.
Так пока я стараюсь четко основы понять, и все решаю с простыми циклами, массивами и т. д. -просто с этими задачамии месяц ничего не получалось, пришла к вам. |
Michael_Rybak |
![]()
Сообщение
#8
|
Michael_Rybak ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: ![]() ![]() ![]() |
Сначала сам алгоритм. Пусть есть N человек. Будем использовать N цветов. Изначально человека 1 покрасим в цвет 1, человека 2 - в цвет 2, и т.д. Все люди покрашены в разные цвета.
Дальше идем по списку пар друзей. Читаем очередную пару: А, В. Если цвета А и В совпадают, значит, они и так уже подружились. Если нет - смотрим, каких людей *меньше* - покрашенных в цвет А, или в цвет В. Меньшую группу перекрашиваем в цвет большей. В конце остается выбрать наиболее часто встречающуюся краску. Сложность такого решения, в оптимальной реализации, составит O(n log n), потому что каждый конкретный человек будет при каждом перекрашивании попадать в группу с как минимум в 2 раза большей численностью, и потому будет перекрашен не более [log n] + 1 раз. Но в твоем случае, судя по всему, достаточно и O(n^2). Тогда можно пренебречь условием "Меньшую группу перекрашиваем в цвет большей", и просто перекрашивать А в В. Достаточно объявить один массив: const MAX_N = 128; Решение будет выглядеть примерно так: Read(n); |
Jekaterina |
![]()
Сообщение
#9
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 61 Пол: Женский Реальное имя: Jekaterina Lauce Репутация: ![]() ![]() ![]() |
Спасибо, попробую разобраться.
|
Michael_Rybak |
![]()
Сообщение
#10
|
Michael_Rybak ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: ![]() ![]() ![]() |
Упс, ошибочка вышла; вместо color[i] := b; нужно color[i] := color[b];
|
Jekaterina |
![]()
Сообщение
#11
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 61 Пол: Женский Реальное имя: Jekaterina Lauce Репутация: ![]() ![]() ![]() |
Все-таки своего ума не хватает...
![]() |
Bokul |
![]()
Сообщение
#12
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: ![]() ![]() ![]() |
Проблемы в реализации алгоритма Michael_Rybak-а?
-------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
Jekaterina |
![]()
Сообщение
#13
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 61 Пол: Женский Реальное имя: Jekaterina Lauce Репутация: ![]() ![]() ![]() |
Большие проблемы
|
Jekaterina |
![]()
Сообщение
#14
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 61 Пол: Женский Реальное имя: Jekaterina Lauce Репутация: ![]() ![]() ![]() |
Я пыталась решать так (см. внизу). Это чайниковский метод (перебор подряд, для 6 строчек, без входного-выходного файла, с обычным выводом на экран), и он работает верно не для все случаев, но какие-то результаты есть. Цвета для меня пока сложноваты.
Прикрепленные файлы ![]() |
Bokul |
![]()
Сообщение
#15
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: ![]() ![]() ![]() |
Вот, то как я понял алгоритм Michael_Rybak-а, только множества у меня не вышло присобачить.
Сообщение отредактировано: Bokul - 2.01.2007 22:25 -------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
Jekaterina |
![]()
Сообщение
#16
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 61 Пол: Женский Реальное имя: Jekaterina Lauce Репутация: ![]() ![]() ![]() |
Спасибо! В программе не идет запись в файл - паскаль требует переменную, но я постараюсь разобраться.
|
Bokul |
![]()
Сообщение
#17
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: ![]() ![]() ![]() |
Ты о чем?
-------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
Jekaterina |
![]()
Сообщение
#18
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 61 Пол: Женский Реальное имя: Jekaterina Lauce Репутация: ![]() ![]() ![]() |
В процедуре записи чисел в файл у меня паскаль настоятельно требует 'variable identifier'
|
Bokul |
![]()
Сообщение
#19
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: ![]() ![]() ![]() |
![]() Действительно так. Не знаю в чем проблема.. В FreePascal-е компилируется все на ура. Вот файл, который создается процедурой WriteFile. Только поменяй расширение на .dat ![]() -------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
volvo |
![]()
Сообщение
#20
|
Гость ![]() |
Цитата(Bokul @ 2.01.2007 22:04) ![]() Действительно так. Не знаю в чем проблема.. Объясняю: в дословном следовании определениям... Цитата(TP Help) Write (procedure) Значит, должна быть переменная...For typed files, writes a variable into a file component. |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 2:33 |