1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
| RathaR |
5.07.2009 16:40
Сообщение
#1
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 346 Пол: Мужской Реальное имя: Иван Репутация: 7 |
Задача следующая:
В выпуклом многоугольнике который имеет N вершин провели все диагонали, никакие три из них не пересекаются в одной точке. Найти количество частей на которые эти диагонали его розделили. Задача в числе простых но в голову ничего не лезет... Подскажите с помощью чего её можна решить? Ведь зависимость между кол-вом вершин и числом елементов на которые его разбивают диагонали не линейная... Следовательно может быть здесь нужно задействовать рекурсию? или считать пересечения диагоналей? направте на путь истинный -------------------- Считающий себя единственым здравомыслящим человеком сумасшедший? Если да, возможно я псих...
Пусть умолкнет всякий критик! Я - системный аналитик! |
![]() ![]() |
| volvo |
7.07.2009 9:58
Сообщение
#2
|
|
Гость |
Цитата можно и вообще без циклов WriteLn(trunc((n-1)*(n-2)*(sqr(n)-3*n+12) / 24)); Цитата такчто в идеале прийдётся еще работать со строками чтоб получить полный результат %) Про тип Comp (который может хранить значения от -263 + 1 до 263 - 1) не забывай. Тебе емкости этого типа - за глаза хватит, не надо придумывать самому себе проблемы на ровном месте. |
| Lapp |
8.07.2009 4:27
Сообщение
#3
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
WriteLn(trunc((n-1)*(n-2)*(sqr(n)-3*n+12) / 24)); RathaR, основная идея моего решения была в том, чтобы смоделировать процесс проведения диагоналей. Занумеруем вершины многоугольника по порядку (важно, что по порядку). Теперь будем проводить диагонали. Каждая диагональ добавляет к существующей разбивке столько частей, на сколько её делят в настоящий момент (то есть сразу после проведения) другие диагонали. Например, в самом начале первая диагональ добавляет 1 часть к уже существующей 1 части (целый багатокутник), тем самым делая полное число частей равным 2. Вторая диагональ (например, в квадрате), имеющая 1 пересечение (то есть поделенная сама на 2 части) прибавляет 2 части, доводя полное число частей до 4. Можно организовать "проведение диагоналей" с подсчетом точек пересечения. Делаем так.. Проводим диагональ от вершины с номером А к вершине с номером В. Она может пересечь только те диагонали, одна вершина которых (назовем одну из них XY) лежит между А и В (то есть A<X<B), а вторая - вне этой дуги (Y<A or B<Y). Затем, чтобы получить число частей, нужно число пересечений увеличить на 1. Вот и вся идея. Еще раз обращаю внимание, что пересекать нужно только с уже проведенными диагоналями. Выяснить, какие диагонали уже проведены можно, используя порядок проведения. Сначала у меня была идея запоминать это в матрице NxN, но такая матрица слишком велика (по крайней мере для ТР), так что я оставил эту идею (оно и к лучшему)). В процессе программирования алгоритм претерпел некоторые не меняющие смысла изменения, так что не вполне отражает суть построения. А как вывести формулу, приведенную volvo, лучше спросить у него самого Ну что, RathaR - ты все еще считаешь эту задачу легкой? Сообщение отредактировано: Lapp - 8.07.2009 9:10 -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
| RathaR |
8.07.2009 5:55
Сообщение
#4
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 346 Пол: Мужской Реальное имя: Иван Репутация: 7 |
Ну что, RathaR - ты все еще считаешь эту задачу легкой? Я - уже нет Еще раз спасибо за объяснение, сам бы вжизни не справился -------------------- Считающий себя единственым здравомыслящим человеком сумасшедший? Если да, возможно я псих...
Пусть умолкнет всякий критик! Я - системный аналитик! |
RathaR Диагонали многоугольника 5.07.2009 16:40
Krjuger Товарищ,у вас явно не совсем корректное задание.
... 5.07.2009 18:07
RathaR
Вообще то она линейная....число элементов равно N... 5.07.2009 18:47
volvo Это чем же, интересно?
Добавлено через 40 сек.
О... 5.07.2009 18:13
Krjuger Видно,Vlovo,мы условие по разному поняли.Ладно вид... 5.07.2009 19:26
Lapp Задача в числе простых но в голову ничего не лезет... 6.07.2009 10:39
RathaR
RathaR, давай не будем записывать задачу в ... 6.07.2009 11:06
Lapp Назвая её простой я не имел в виду то что она личн... 6.07.2009 11:17
RathaR
... ответ будет для четырехугольника - 4?
Да, ... 6.07.2009 11:41
Lapp Условие на украинском языке...Ничего, я попробую р... 6.07.2009 12:50
RathaR Задача 1. Діагоналі.
Умова. У випуклому багатокутн... 6.07.2009 13:12
Гость Вот:
var
n,i,j,p: integer;
begin
repeat
W... 7.07.2009 5:06
RathaR
Вот:
готовый код это канешно очень хорошо, и за ... 7.07.2009 8:12
Lapp но только целью моей было скорее понять её, чем по... 7.07.2009 8:22
RathaR
А что именно удивило: что цикл - или что мало цик... 7.07.2009 8:31
Lapp Под маской гостя скрывался (ненарочно) я. Извиняю... 7.07.2009 5:08
Lapp Пока писал и рисовал объяснение, у меня появилось ... 7.07.2009 9:08
RathaR
Пока писал и рисовал объяснение, у меня появилось... 7.07.2009 9:27
RathaR
Про тип Comp (который может хранить значения от -... 7.07.2009 17:06
Lapp организаторы олимпиады наверное всёже считают, раз... 8.07.2009 6:22
RathaR
Возможно, они считают эту формулу известной. Но ... 8.07.2009 6:34
volvo Использовалась известная формула (известная мне по... 8.07.2009 10:56
Lapp это даже лучше, лишний раз пошевелить извилинами и... 8.07.2009 11:16
s13 а что если добавим условие что мы вводим и количес... 12.10.2013 16:25![]() ![]() |
|
Текстовая версия | 9.12.2025 0:42 |