Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
7 / 7 / 0
Регистрация: 25.03.2025
Сообщений: 16

Сколько черырёхугольников получилось?

29.03.2025, 14:53. Показов 2191. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В треугольнике из двух углов проведены линии, как это представлено на схеме:

Задание:
Подсчитайте программно количество всех в результате получившихся четырёхугольников.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.03.2025, 14:53
Ответы с готовыми решениями:

Вывести сколько баллов получилось за составленное слово
Помогите пожалуйста написать код к задаче: Соня играет в слова. Она получает один балл, если в свой ход придумает слово (если она ничего...

Не получилось установить NumPy
Добрый день, подскажите, пожалуйста, как решать проблему с установкой numpy? Скачал дистрибутив, запускаю файл setup.py, он там что-то...

Заданное число N записали 100 раз подряд и затем возвели в квадрат. Что получилось?
Заданное число N записали 100 раз подряд и затем возвели в квадрат. Что получилось? Помогите, пожалуйста

11
261 / 36 / 7
Регистрация: 03.02.2025
Сообщений: 126
29.03.2025, 22:31
_BS,
Python
1
2
3
4
linel = int(input("Введите количество линий выходящих из левого угла: "))
liner = int(input("Введите количество линий выходящих из правого угла: "))
Kvadrati = linel * liner
print("Количество квадратов: ", Kvadrati)
Добавлено через 10 минут
Программу проверил у себя на бумажке. Чертил линии. Давал запросы:
3х3
2х2
4х4
4х3
Считает правильно.
1
 Аватар для ViachaslauK
124 / 183 / 16
Регистрация: 08.10.2024
Сообщений: 664
30.03.2025, 10:11
Цитата Сообщение от Eduard1977 Посмотреть сообщение
Программу проверил у себя на бумажке. Чертил линии. Давал запросы:
Считает правильно.
Советовал бы начать с математики)))
Например треугольник с двумя линиями из нижних углов даст 9 четырехугольников)))

Python
1
2
3
4
5
def count_quadrilaterals(L, R):
    """Функция для подсчёта количества четырёхугольников в треугольнике"""
    if L < 1 or R < 1:
        return 0
    return (L * R * (L + 1) * (R + 1)) // 4
0
7 / 7 / 0
Регистрация: 25.03.2025
Сообщений: 16
30.03.2025, 12:22  [ТС]


Python
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
from itertools import combinations
 
 
class FigureFinder:
    """Класс для поиска фигур на основе заданного шаблона (топологии).
 
    Этот класс позволяет находить фигуры, образованные заданным количеством точек,
    проверяя, находятся ли точки на одной линии и соответствуют ли они заданной топологии.
 
    Атрибуты:
        lines (set): Набор линий, представляющих точки, которые могут быть соединены.
        angles_in_figure (int): Количество углов в искомой фигуре.
        number_of_all_points (int): Общее количество именованных точек на чертеже.
        topology (list): Список пар индексов точек, представляющих топологию фигуры.
        unconnected_points (list): Список пар индексов несоединённых между собой точек.
    """
 
    def __init__(self, input_lines, input_angles_in_figure, input_number_of_all_points, input_topology,
                 input_unconnected_points):
        """Инициализирует FigureFinder с заданными параметрами.
 
        Аргументы:
            input_lines (set): Набор линий, представляющих точки.
            input_angles_in_figure (int): Количество углов в искомой фигуре.
            input_number_of_all_points (int): Общее количество именованных точек на чертеже.
            input_topology (list): Список пар индексов точек для топологии.
            input_unconnected_points (list): Список пар индексов несоединённых точек.
        """
        self.lines = input_lines
        self.angles_in_figure = input_angles_in_figure
        self.number_of_all_points = input_number_of_all_points
        self.topology = input_topology
        self.unconnected_points = input_unconnected_points
 
    def _is_points_on_the_same_line(self, point1, point2):
        """Проверяет, находятся ли две точки на одной линии.
 
        Аргументы:
            point1 (int): Индекс первой точки.
            point2 (int): Индекс второй точки.
 
        Возвращает:
            bool: True, если точки находятся на одной линии, иначе False.
        """
        return any(point1 in line and point2 in line for line in self.lines)
 
    def _is_figure(self, *points):
        """Проверяет, образуют ли заданные точки фигуру.
 
        Аргументы:
            *points (int): Индексы точек, которые нужно проверить.
 
        Возвращает:
            bool: True, если точки образуют фигуру, иначе False.
        """
        figure_topology = {(points[a], points[b]) for a, b in self.topology}
        unconnected = {(points[a], points[b]) for a, b in self.unconnected_points}
 
        if all(self._is_points_on_the_same_line(a, b) for a, b in figure_topology):
            return not any(self._is_points_on_the_same_line(a, b) for a, b in unconnected)
 
        return False
 
    def count_figures(self):
        """Считает количество фигур с заданным количеством углов и выводит их наименования.
 
        Возвращает:
            int: Количество найденных фигур.
        """
        figures = []
        for combination in combinations(range(1, self.number_of_all_points + 1), self.angles_in_figure):
            if self._is_figure(*combination):
                figures.append(combination)  # Сохраняем комбинацию точек, образующих фигуру
 
        # Выводим наименования точек для каждой найденной фигуры
        for figure in figures:
            print(f"Найдена фигура с точками: {figure}")
 
        return len(figures)  # Возвращаем количество найденных фигур
 
 
if __name__ == '__main__':
    lines = {
        (1, 2, 3, 4, 5),  # точки на одной линии
        (1, 10, 11, 12, 6),
        (1, 15, 16, 13, 7),
        (1, 18, 17, 14, 8),
        (1, 9),
        (9, 18, 15, 10, 2),
        (9, 17, 16, 11, 3),
        (9, 14, 13, 12, 4),
        (9, 8, 7, 6, 5)
    }
 
    angles_in_figure = 4  # Сколько углов в отыскиваемых фигурах
    number_of_all_points = 18  # Общее количество именованных точек на чертеже
    topology = [(0, 1), (0, 3), (2, 1), (2, 3)]  # Индексы точек для топологии
    unconnected_points = [(0, 2), (1, 3)]  # Индексы несоединённых между собой точек топологии
 
    figure_finder = FigureFinder(lines,
                                 angles_in_figure,
                                 number_of_all_points,
                                 topology,
                                 unconnected_points)
    print(f"Количество фигур с {angles_in_figure} углами: {figure_finder.count_figures()} шт.")
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Найдена фигура с точками: (2, 3, 17, 18)
Найдена фигура с точками: (2, 4, 13, 15)
Найдена фигура с точками: (2, 4, 14, 18)
Найдена фигура с точками: (2, 5, 6, 10)
Найдена фигура с точками: (2, 5, 7, 15)
Найдена фигура с точками: (2, 5, 8, 18)
Найдена фигура с точками: (3, 4, 13, 16)
Найдена фигура с точками: (3, 4, 14, 17)
Найдена фигура с точками: (3, 5, 6, 11)
Найдена фигура с точками: (3, 5, 7, 16)
Найдена фигура с точками: (3, 5, 8, 17)
Найдена фигура с точками: (4, 5, 6, 12)
Найдена фигура с точками: (4, 5, 7, 13)
Найдена фигура с точками: (4, 5, 8, 14)
Найдена фигура с точками: (10, 11, 17, 18)
Найдена фигура с точками: (10, 12, 13, 15)
Найдена фигура с точками: (10, 12, 14, 18)
Найдена фигура с точками: (11, 12, 13, 16)
Найдена фигура с точками: (11, 12, 14, 17)
Найдена фигура с точками: (15, 16, 17, 18)
Количество фигур с 4 углами: 20 шт.
0
229 / 170 / 71
Регистрация: 14.06.2024
Сообщений: 459
30.03.2025, 12:39
Цитата Сообщение от _BS Посмотреть сообщение
количество всех в результате получившихся четырёхугольников
видимо так:
Миниатюры
Сколько черырёхугольников получилось?  
0
261 / 36 / 7
Регистрация: 03.02.2025
Сообщений: 126
30.03.2025, 15:48
Я думал простые четырехугольники нужно посчитать, а не составные в которые входят и другие четырехугольники. Если составные то же считать то код будет посложней конечно.
0
 Аватар для ViachaslauK
124 / 183 / 16
Регистрация: 08.10.2024
Сообщений: 664
30.03.2025, 18:28
Цитата Сообщение от Eduard1977 Посмотреть сообщение
Если составные то же считать то код будет посложней конечно.
Для тех, уто в 8-классе ходил на уроки геомертии и математики, а не курил в туалете - ничего сложного. формула в 1 строчку)
0
261 / 36 / 7
Регистрация: 03.02.2025
Сообщений: 126
30.03.2025, 19:36
Привет.
_BS, у людей ViachaslauK, udmurt2024, вышло 36 квадратов. А у тебя только 20 если ты подсчитал сколько квадратов из твоего первого треугольника от сообщения. Что то не так у тебя в коде.
0
7 / 7 / 0
Регистрация: 25.03.2025
Сообщений: 16
30.03.2025, 23:45  [ТС]
Python
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
from itertools import combinations
 
class FigureFinder:
 
    def __init__(self, lines, angles_in_figure, number_of_all_points):
        self.lines = lines
        self.angles_in_figure = angles_in_figure
        self.number_of_all_points = number_of_all_points
            
    def _is_points_on_the_same_line(self, point1, point2):
        return point2 if (any(point1 in line and point2 in line for line in lines)) else -1
            
    def _is_figure(self, *points):
        lst = []
        for i in range(len(points)):
            lst.extend(self._is_points_on_the_same_line(points[i], point) for point in points if  points[i]!=point)
        if lst.count(-1) == self.angles_in_figure and all(lst.count(point) == 2 for point in points):
            return True
        return False
 
    def count_figures(self):
        figures = []
        for combination in combinations(range(1, self.number_of_all_points + 1), self.angles_in_figure):
            if self._is_figure(*combination):
                figures.append(combination)
 
        for figure in figures:
            print(f"Найдена фигура с точками: {figure}")
 
        return len(figures)
 
if __name__ == '__main__':
    lines = {
        (1, 2, 3, 4, 5),
        (1, 10, 11, 12, 6),
        (1, 15, 16, 13, 7),
        (1, 18, 17, 14, 8),
        (1, 9),
        (9, 18, 15, 10, 2),
        (9, 17, 16, 11, 3),
        (9, 14, 13, 12, 4),
        (9, 8, 7, 6, 5)
    }
    angles_in_figure = 4
    number_of_all_points = 18
    figure_finder = FigureFinder(lines, angles_in_figure, number_of_all_points)
    print(f"Количество фигур с {angles_in_figure} углами: {figure_finder.count_figures()} шт.")
Найдена фигура с точками: (2, 3, 10, 11)
Найдена фигура с точками: (2, 3, 15, 16)
Найдена фигура с точками: (2, 3, 17, 18)
Найдена фигура с точками: (2, 4, 10, 12)
Найдена фигура с точками: (2, 4, 13, 15)
Найдена фигура с точками: (2, 4, 14, 18)
Найдена фигура с точками: (2, 5, 6, 10)
Найдена фигура с точками: (2, 5, 7, 15)
Найдена фигура с точками: (2, 5, 8, 18)
Найдена фигура с точками: (3, 4, 11, 12)
Найдена фигура с точками: (3, 4, 13, 16)
Найдена фигура с точками: (3, 4, 14, 17)
Найдена фигура с точками: (3, 5, 6, 11)
Найдена фигура с точками: (3, 5, 7, 16)
Найдена фигура с точками: (3, 5, 8, 17)
Найдена фигура с точками: (4, 5, 6, 12)
Найдена фигура с точками: (4, 5, 7, 13)
Найдена фигура с точками: (4, 5, 8, 14)
Найдена фигура с точками: (6, 7, 10, 15)
Найдена фигура с точками: (6, 7, 11, 16)
Найдена фигура с точками: (6, 7, 12, 13)
Найдена фигура с точками: (6, 8, 10, 18)
Найдена фигура с точками: (6, 8, 11, 17)
Найдена фигура с точками: (6, 8, 12, 14)
Найдена фигура с точками: (7, 8, 13, 14)
Найдена фигура с точками: (7, 8, 15, 18)
Найдена фигура с точками: (7, 8, 16, 17)
Найдена фигура с точками: (10, 11, 15, 16)
Найдена фигура с точками: (10, 11, 17, 18)
Найдена фигура с точками: (10, 12, 13, 15)
Найдена фигура с точками: (10, 12, 14, 18)
Найдена фигура с точками: (11, 12, 13, 16)
Найдена фигура с точками: (11, 12, 14, 17)
Найдена фигура с точками: (13, 14, 15, 18)
Найдена фигура с точками: (13, 14, 16, 17)
Найдена фигура с точками: (15, 16, 17, 18)
Количество фигур с 4 углами: 36 шт.
0
5515 / 2868 / 571
Регистрация: 07.11.2019
Сообщений: 4,758
31.03.2025, 19:33
А невыпуклые четырехугольники считаете?
типа 13-5-18-6
0
7 / 7 / 0
Регистрация: 25.03.2025
Сообщений: 16
01.04.2025, 19:39  [ТС]
Для решения подобных задач, по-моему, подходит Теория графов. Тем более, что есть и подходящие библиотеки для этого.
0
229 / 170 / 71
Регистрация: 14.06.2024
Сообщений: 459
01.04.2025, 19:48
Цитата Сообщение от _BS Посмотреть сообщение
количество всех в результате получившихся четырёхугольников
т.е расшифровки по вершинам не требуется,
тогда это матрица 3*3 и сколько прямоугольников в ней?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.04.2025, 19:48
Помогаю со студенческими работами здесь

Как подобрать числа для пар, чтобы получилось максимально возможное количество ?
Всех приветствую, подскажите как реализовать алгоритм ? Есть четное число n. Нужно разбить числа от 1 до n на пары так, чтобы сумма внутри...

Нужно поменять этот код, чтобы было как на картинке, я пытался не получилось
from tkinter import * class Frame(Tk): #создание окна def __init__(self): super().__init__() ...

Задана последовательность цифр, можно ли расставить между некоторыми знаки + и 1 что бы получилось заданное число
Задана последовательность цифр. Определите, можно ли расставить между некоторыми из них знаки &quot;+&quot; и &quot;-&quot;, так чтобы...

Можно ли расставить между цифрами знаки + и - чтобы получилось заданное число
Задана последовательность цифр. Определите, можно ли расставить между некоторыми из них знаки &quot;+&quot; и &quot;-&quot;, так что бы...

Расставьте знаки + между некоторыми цифрами числа, чтобы в сумме получилось число M
Расставьте знаки + между некоторыми цифрами числа 12345678910111213...N, чтобы в сумме получилось число M. На вход получаем два...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru