С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
8 / 7 / 1
Регистрация: 08.04.2021
Сообщений: 151

Треугольники

24.07.2021, 22:57. Показов 2556. Ответов 7
Метки с++ (Все метки)

Студворк — интернет-сервис помощи студентам
реугольники
У Глеба есть n отрезков.

Глеб — большой любитель геометрии и всяких бесполезных действий. Поэтому он хочет выяснить, сколько различных невырожденных треугольников у него получится составить из всех имеющихся у него отрезков.

Два треугольника считаются различными, если хотя бы одна из сторон треугольников различна.

Два отрезка считаются различными, если различаются их номера в порядке ввода.

Входные данные

В первой строке записано число n, 3≤n≤4000.
В следующих строках записаны длины отрезков 1≤ai≤109.

Выходные данные

Вывести одно число — количество треугольников.

C++
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
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
 
int main() {
    int n; cin >> n;
    vector<int> a(n);
    for (int i = 0; i < n; i++)
        cin >> a[i];
    sort(a.begin(), a.end());
    int max1, max2, x, kol = 0;
    if (n == 3) {
        if (a[0] + a[1] > a[2])
            cout << 1;
        else
            cout << 0;
    }
    else {
        for (int i = n - 1; i >= 2; i--) {
            max1 = a[i];
            for (int j = i - 1; j >= 1; j--) {
                max2 = a[j];
                int L = 0;
                int R = j;
                while (R - L > 1) {
                    int M = (R + L) / 2;
                    if (a[M] + max2 > max1)
                        R = M;
                    else
                        L = M;
                }
                if (a[j - 1] + max2 > max1) {
                    int k = R;
                    cout << (j - k) << endl;
                    kol += (j - k);
                }
            }
        }
        cout << kol;
    }
    return 0;
}

Уже очень долго бьюсь с этой задачей, умоляю на помощь. Заранее огромное спасибо
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.07.2021, 22:57
Ответы с готовыми решениями:

Треугольники (C\C++)
Написать программу, по длинам сторон распознающую среди всех треугольников ABC прямоугольные. Если таковых нет, то вычислить величину угла...

Треугольники
На плоскости задано n точек с целочисленными координатами. Никакие три точки не лежат на одной прямой. Определить k - количество...

Треугольники
Доброй ночи\утро\день всем! Сразу прошу прощения, если такая тема уже есть - но совесть моя почти чиста - искала - и не нашла ничего...

7
 Аватар для YUEN HOIFEF
252 / 185 / 47
Регистрация: 31.01.2021
Сообщений: 934
25.07.2021, 08:55
Два треугольника считаются различными, если хотя бы одна из сторон треугольников различна.

Два отрезка считаются различными, если различаются их номера в порядке ввода.
Судя по твоему коду каждый отрезок отличается от другого номером в порядке ввода.


Тогда если за один ввод водить три стороны
Введите длину A:
Введите длину B:
Введите длину C:

То различными будут треугольники у которых хотя бы одна сторона от другого ввода??????
0
8 / 7 / 1
Регистрация: 08.04.2021
Сообщений: 151
25.07.2021, 11:14  [ТС]
Если вводят три стороны a, b и c то ответ будет 1 или 0
0
 Аватар для YUEN HOIFEF
252 / 185 / 47
Регистрация: 31.01.2021
Сообщений: 934
25.07.2021, 11:40
Видимо надо рассматривать abc как один ввод и так n раз. И код переделывать. Но возможно я не правильно понимаю задачу...
Как то надо уточнить, а то не то решим.
Ведь ты вводишь n -количество оирезков,
ai -длины этих отрезков
А затем ищешь существующие треуголники. Так же?

Добавлено через 16 минут
У Глеба есть n отрезков
Два отрезка считаются различными, если различаются их номера в порядке ввода.
Непонятка здесь.
0
8 / 7 / 1
Регистрация: 08.04.2021
Сообщений: 151
25.07.2021, 11:58  [ТС]
вот пример, может так понятней будет
ввод : ___ вывод :
4 3 5 5 5___4

3 3 5 5 ____1
0
 Аватар для YUEN HOIFEF
252 / 185 / 47
Регистрация: 31.01.2021
Сообщений: 934
25.07.2021, 13:24
C++
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
#include<iostream>
 
#include<stdlib.h>
#include<time.h>
 
 
#define BUSY 1
 
 
 
 
using namespace std;
 
int n = 1;
int exists_triangle = 0;
 
typedef struct
 {
int length;
int busy_flag;
 } AI;
 
 
 
bool find_bc( AI *ai, int a_index )
 {
int succ = 0;
 
for( int b=0;  b<n; b++ )
 {
 if( b != a_index && ai[ b ].busy_flag == 0 
  && ai[ b ].length <= ai[ a_index ].length )
  {
 
   for( int c=b; c<n; c++ )
    {
    if( c != a_index && c != b && ai[ c ].busy_flag == 0
    && ai[ c ].length <= ai[ b ].length )
     {
    if( (ai[ b ].length + ai[ c ].length) > ai[ a_index ].length )
     {
     // Треугольник существует.
 
     ai[ a_index ].busy_flag = BUSY;
     ai[ b ].busy_flag = BUSY;
     ai[ c ].busy_flag = BUSY;
 
     succ = 1;
     break;
 
     }
     }
    }
  }
 
 if( succ > 0 ) break;
 }
 
return( succ ) ? true : false;
 }
 
 
 
 
 
 
int main()
 {
 
srand( time(NULL) );
 
n = 3 + rand() % (40-3+1);   // 3<n<4000
 
AI *ai = new AI [ n ];
 
 
 
 
for( int i=0; i<n; i++ )
 {
 ai[ i ].length = 1 + rand() % (108); // 0<ai<109
 ai[ i ].busy_flag = 0;
 }
 
 
for(int a=0; a<n; a++ )
 {
 
 if( ai[ a ].busy_flag == 0 ) // Top A found
  {
  if( find_bc(ai, a) ) ++exists_triangle;
  }
 }
 
 
cout << "Namber of lines: " << n << endl << "Namber of triangles: " <<  exists_triangle << endl;
 
return 0;
 }
Я понял задачу так..
0
8 / 7 / 1
Регистрация: 08.04.2021
Сообщений: 151
25.07.2021, 14:18  [ТС]
Не очень понимаю какие начальные данные

Добавлено через 3 минуты
Эта задача из темы бин поиска
0
 Аватар для YUEN HOIFEF
252 / 185 / 47
Регистрация: 31.01.2021
Сообщений: 934
25.07.2021, 14:45
Начальные данные я просто заменил генератором случайных чисел. Чтоб не вводить самому(строки с 70 по 83). Напиши вместо него cin << n; и т.д как у тебя в коде

Добавлено через 23 минуты
С бинарным поиском будет немного подругому .
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.07.2021, 14:45
Помогаю со студенческими работами здесь

Треугольники
Интересно, можно ли на C++ (или любом другом языке) корректно определить класс треугольник, положив в его основу три хорошо известных...

треугольники
#include &lt;math.h&gt; #include &lt;iostream&gt; #include &quot;class.h&quot; using namespace std; tre1::tre1(double){ a=0; ...

Треугольники
Треугольники У Глеба есть n отрезков. Глеб — большой любитель геометрии и всяких бесполезных действий. Поэтому он хочет выяснить,...

Круги и треугольники
http://s52.***********/i137/1406/24/eee0c48b21c0.jpg вот задания!! #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; void...

Перисикаются ли треугольники
Здравствуйте :beach: Имеются по три вершины двух треугольников. Задача в том проверить пересекаются треугольники. Заранее спасибо! :)


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru