Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ GUIwin32 вылезает консоль http://www.cyberforum.ru/cpp-beginners/thread1008428.html
Вообщем создаю в моём Code Blocks проект GUIwin32 , автоматом генерируется пример с окном, но при запуске проги вылезает ещё и консольное окно, как его убрать, если это возможно? Или в Code Blocks этим уже не стоит заниматься? тогда посоветуйте IDE под WinAPI
C++ Сортировка по алфавиту Доброго времени суток. Имеется задача: Описать структуру с именем ORDER, содержащую следующие поля: *расчетный счет плательщика *расчетный счет получателя *перечисляемая сумма в рублях Написать программу выполняющую следующие действия: *ввод с клавиатуры данных в массив состоящий из восьми элементов типа ORDER, записи должны быть размещены в алфавитном порядке по расчетным счетам... http://www.cyberforum.ru/cpp-beginners/thread1008420.html
C++ Дешифрование
У Страуструпа есть такие упражнения 11. (*2) Напишите шифрующую программу, которая читает символы из cin и пишет их в cout в зашифрованном виде. Можно использовать следующий простой метод шифрации: для символа s зашифрованное представление получается в результате операции s^key, где key - массив символов, передаваемый в командной строке. Символы из массива key ...
C++ Как сравнить строки?
Бобрый день. Подскажите пжалста, как можно сравнить строки без учета регистра (шобы самому не писать функцию перевода в нижний регистр). надо сравнить две строковых переменные без учета регистра: String Sklad.tip; String poisk; // Создаю консольное приложение в визуал студии , интересуют именно сишные методы, а не визуала Заранее всем по "спасибу" :)
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:
C++ Найти количество элементов массива вещественных чисел, дробная часть которых равна 0,5 Найти количество элементов массива вещественных чисел, дробная часть которых равна 0,5 подробнее

Показать сообщение отдельно
kpoxaa
71 / 32 / 1
Регистрация: 03.08.2012
Сообщений: 446
15.11.2013, 15:33  [ТС]     На прямой своими концами заданы N отрезков. Найти точку принадлежащую максимальному числу отрезков
Вот как получилось: может немного не так работает, но вроде бы правильно

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 отрезков. Найти точку принадлежащую максимальному числу отрезков  
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru