Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ GUIwin32 вылезает консоль http://www.cyberforum.ru/cpp-beginners/thread1008428.html
Вообщем создаю в моём Code Blocks проект GUIwin32 , автоматом генерируется пример с окном, но при запуске проги вылезает ещё и консольное окно, как его убрать, если это возможно? Или в Code Blocks...
C++ Сортировка по алфавиту
Доброго времени суток. Имеется задача: Описать структуру с именем ORDER, содержащую следующие поля: *расчетный счет плательщика *расчетный счет получателя *перечисляемая сумма в рублях...
C++ Дешифрование
У Страуструпа есть такие упражнения 11. (*2) Напишите шифрующую программу, которая читает символы из cin и пишет их в cout в зашифрованном виде. Можно использовать следующий простой...
C++ Как сравнить строки? Бобрый день. Подскажите пжалста, как можно сравнить строки без учета регистра (шобы самому не писать функцию перевода в нижний регистр). надо сравнить две строковых переменные без учета регистра:... http://www.cyberforum.ru/cpp-beginners/thread1008416.html
C++ No operator found which takes a right-hand operand http://www.cyberforum.ru/cpp-beginners/thread1008409.html
Кто подскажет в чем ошибка? #include <iostream> #include <vector> class LongNumber { public:
Найти количество элементов массива вещественных чисел, дробная часть которых равна 0,5 C++
Найти количество элементов массива вещественных чисел, дробная часть которых равна 0,5
C++ В чем ошибки ?
#include<iostream> using namespace std; int main() { const int n = 10; int mas; int i;
C++ Ошибка в указателе Необработанное исключение по адресу 0x6F274F98 (msvcr110d.dll) в Динамическая матрица.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xFEEEFEE2. вот что выводит когда ввожу матрицы ... http://www.cyberforum.ru/cpp-beginners/thread1008370.html
C++ Загвоздка с объявлением переменной http://www.cyberforum.ru/cpp-beginners/thread1008362.html
Всем доброго времени суток. Недавно начал изучать С++ по Дейтелу. Есть такой пример программы, который прерывает цикл при определенном значении x при помощи break; //Применение break в структуре for...
C++ Иерархия классов Доброе время суток! есть иерархия классов: #include <iostream> class date { int day; public: data(int day0){ day = day0 http://www.cyberforum.ru/cpp-beginners/thread1008353.html
kpoxaa
74 / 35 / 1
Регистрация: 03.08.2012
Сообщений: 447
15.11.2013, 15:33  [ТС] 0

На прямой своими концами заданы N отрезков. Найти точку принадлежащую максимальному числу отрезков

15.11.2013, 15:33. Просмотров 3192. Ответов 17
Метки (Все метки)

Ответ

Вот как получилось: может немного не так работает, но вроде бы правильно

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
100
101
102
103
104
105
106
107
108
109
110
111
#include "stdafx.h"
#include <iostream>
#include <string>
#include <cctype>
#include <conio.h>
#include <locale>
 
using namespace std; 
 
 
class Segment 
{
private: 
    int start; // кордината начала отрезка
    int end;     //  кордината конца отрезка 
    int maxIndexIntersection; // индекс максимального пересечения
    int countIncomingSegm; // счетчик макимально входящих отрезков в этот отрезок
 
public: 
    Segment() 
    {
 
    }
 
    Segment(int start, int end)
    {
        
        this->start = start;
        this->end = end;
        
        maxIndexIntersection = 0;
        countIncomingSegm = 0;
    }
 
    void static searchTerms(Segment *segment, int size) // поиск точки
    {
        for(int i = 0; i<size; i++) // по очереди нужно проверить все отрезки.
        {
            for(int j = 0; j<size; j++)
            {
                if(j == i) continue; // самих себя с самим собой не надо проверять. только отрезки, которые рядом
                if( (segment[j].start >= segment[i].start) && (segment[j].start <= segment[i].end) ) // проверяем, если следующий отрезок, своей начальной точки попадает в промежуток отрезка, на котором мы сейчас находимся
                {
                    segment[i].maxIndexIntersection = segment[j].start; // сохраняем первое вхождение нового отрезка
                    segment[i].countIncomingSegm++; // счетчик вхождений для одного отрезка(сколько отрезков входит в этот отрезок)
                }
            }
        }
        
        int maxCount = 0;
        int finalIndex = -1;
 
        // теперь нужно сделать поиск по счетчику, чтобы узнать какой отрезок содержит в себе максимум других отрезков
        for(int i = 0; i<size; i++)
        {
            if(segment[i].countIncomingSegm>maxCount) // если счетчик объекта хранит в себе больше чем то, что мы уже проверили
            {
                // значит это новый отрезок, который хранит в себе больше отрезков и нам нужен именно он
                maxCount = segment[i].countIncomingSegm; // сохраняем в переменную макисмальное число отрезков из данного объекта
                finalIndex = i; // сохраняем индект этого объекта, чтобы потом без цикла отоброзить данные
            }
        }
 
        if(finalIndex == -1 ) // если переменная осталась непроинициализирована, значит не одной точки не было найдено
        {
            cout<<"На прямой нет пересикающихся отрезков";
        }
        else 
        {
            cout<<"Больше всего отрезков пересекается на прямой в точке: "<<segment[finalIndex].maxIndexIntersection<<endl;
            cout<<"Кординаты отрезка с максимальным пересечением: ["<<segment[finalIndex].start<<"] ["<<segment[finalIndex].end<<"]";
        }
    }
};
 
void main()
{
    setlocale(LC_ALL,"RUSSIAN"); // для русского текста в программе
 
    int number;
    cout<<"Введите количество отрезков: ";
    cin>>number;
 
    Segment *segment = new Segment[number];
 
    for(int i = 0; i<number; i++)
    {
        int start, end;
 
        cout<<"Ввод данных для "<<(i+1)<<" отрезка"<<endl;
        cout<<"Начало отрезка: ";
        cin>>start;
        cout<<"Конец отрезка: ";
        cin>>end;
        cout<<endl;
 
        // если ввели начало отрезка больше чем его конец. то переспрашиваем ввод для этого цикла заново
        if(start>=end) 
        {
            i--;
            continue; //пропускаем интерацию
        }
        segment[i] = Segment(start, end); // создаем объект и передаем в конструктор с параметрами начало и конец отрезка
    }
 
    segment->searchTerms(segment, number); // вызываем стаический метод поиска пересечений
 
    delete segment; // после всех операций хорошим тоном считается очистка выделенной памяти
    
    getch(); // чтобы консоль быстро не закрылась ждем ввода любого символа с клавиатуры
}


Вернуться к обсуждению:
На прямой своими концами заданы N отрезков. Найти точку принадлежащую максимальному числу отрезков
0
Миниатюры
На прямой своими концами заданы N отрезков. Найти точку принадлежащую максимальному числу отрезков  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2013, 15:33

В файле заданы координаты концов отрезков. Вывести их на экран
в файле задано координаты концов отрезков. Вівести их на екран. Количество отрезков не известно ...

Найти ГМТ середин всевозможных отрезков с концами на двух данных отрезках
Найти ГМТ середин всевозможных отрезков с концами на двух данных отрезках. (Обязательно сделайте...

Вывести наименьшее расстояние между концами отрезков
Пусть даны два отрезка, заданные координатами точек их концов. Найти с точностью до тысячных...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru