LINUX.ORG.RU

Количество кусков на которые режется круг

 , ,


0

1

На окружности помещают n равномерно распределенных точек, а затем все их попарно соединяют отрезками. После этого считают p(n) — количество частей, на которые оказался поделён круг. Например:

  • p(1) = 1 отрезков нет,
  • p(2) = 2 один отрезок по диаметру режет круг на две части,
  • p(3) = 4 правильный треугольник режет круг на три сегмента и сам треугольник даёт один кусочек,
  • p(4) = 8 квадрат режет круг на 4 сегмента снаружи и четыре части внутри (из-за диагоналей),
  • p(5) = 16 у пятиугольника пять сегментов снаружи, пентаграмма из 6 кусков внутри и ещё пять кусочков вокруг этой звезды.

    Чему равно p(6)?

    Как можно посчитать p(n) на компьютере, в смысле алгоритма и языка?

★★★★★

Последнее исправление: Xenius (всего исправлений: 1)
Ответ на: комментарий от vvn_black

Там 30, а не 32, так что эта теория вылетела в трубу.

ZERG ★★★★★
()

Вот тебе число кусков, на которые правильный многоугольник делится диагоналями. Для твоей задачи прибавь число сторон ещё. https://oeis.org/A007678

TeopeTuK ★★★★★
()

сначала напиши функцию, которая для трёх хорд определяет, лежит ли точка пересечения первых двух хорд «слева от» / «справа от» / «на» третьей хорде.
то есть, функция принимает 6 чисел 1..n и возвращает число 1,0,-1
это можно сделать алгебраически точно, а можно приближённо через плавучку (я бы выбрал второй вариант)

потом напиши структуру данных для хранения кусков
структура должна предоставлять операции:

  • получить список рёбер куска по часовой стрелке
  • получить примыкающий кусок, лежащий по другую сторону от данного ребра

т.е., кусок - это структура, хранящая его рёбра (ребро задаётся парой чисел 1..n) и указатели на соседние куски

а потом тупо начинай резать n-угольник, добавляя по одной диагонали
судя по сложности O(n^4), для n больше нескольких сотен такое работать не будет

ну, или тупо возьми готовую формулу из OEIS )))

Egor_
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.