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

Подсчет количества минут от промежутка до промежутка без учета еще одного промежутка времени. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Быстрая сортировна на MPI http://www.cyberforum.ru/cpp-beginners/thread338406.html
На нулевом процессоре делим массив по pivot-у. Одну часть оставляем себе, другую - передаем следующему процессору. Если количество кусков превысит количество процессоров, то начинаем передавать первому свободному процессору. Когда процессор закончит колдовать над своей частью передаем предыдущему процессору (который этот кусок ему передал). А тот в свою очередь своему адресату и т.д. Как...
C++ Помощь ну уж совсем новичку Решил заняться C++, поставил Microsoft Visual C++ Express. Но вот проблема! Хотел написать ХеллоуВорлдину. В примере код такой: #include <iostream.h> int main() { cout << "Hello, world!" << endl; return 1; } Но он выписывает ошибку: http://www.cyberforum.ru/cpp-beginners/thread338401.html
C++ непонятки
у меня есть прога которая берет дабл и разделяет его на две сост. целое и дробное this->z = int(d); this->p = ( d - int(d) )*100+0.5; объясните почему без "+0.5" ничего не работает для чисел чья дробная часть( нечетная и меньше равна 9 )?
Получение идентификатора кодировки по названию C++
Всем привет! Думаю над следующей задачей Необходимо осуществить преобразование кодировки текста в UTF-8 Буду использовать функцию MultiByteToWideChar Один вопрос В ней надо указывать Code Page исходной кодировки
C++ undefined reference http://www.cyberforum.ru/cpp-beginners/thread338308.html
Доброго времени суток! Есть следующий код: #include <iostream> using namespace std; enum direction {Up, Down, Left, Right}; void rotateLeft (direction &);
C++ Стек! Реализуйте структуру данных "стек". Напишите программу, содержащую описание стека и моделирующую работу стека, реализовав все указанные здесь методы. Программа считывает последовательность команд и в зависимости от команды выполняет ту или иную операцию. После выполнения каждой команды программа должна вывести одну строчку. Возможные команды для программы: push n Добавить в стек число n... подробнее

Показать сообщение отдельно
diagon
Higher
1927 / 1193 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2

Подсчет количества минут от промежутка до промежутка без учета еще одного промежутка времени. - C++

02.08.2011, 16:39. Просмотров 1081. Ответов 5
Метки (Все метки)

Доброго времени суток.
В input.txt лежит четное число n и n дат. Нужно отсортировать эти даты и разбить их на пары. Одна - начало, другая конец. И найти суммарное количество минут между ними, не учитывая время от 18:00 до 10:00.
Полное условие тут.
Я прикинул, как будет выглядеть реализация этой задачи просто с функциями, и как я ее буду отлаживать... В общем, набросал простенькую структуру и перегрузил для нее >> и <
Получилось так
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
#include <iostream>
#include <vector>
#include <algorithm>
#include <iomanip>
struct TDate{
    int day, month, hour, minute;
    
    inline static int day_in_month(int month)
    {
        switch (month)
        {
            case 2: 
                return 28; //год точно невисокосный
            case 1:     case 3:     case 5:
            case 7:     case 8:     case 10:
            case 12:
                return 31;
            default:
                return 30;
        }
    }
    
    
 
    inline bool operator < (const TDate& a) const
    {
        
        if (month != a.month)
            return month < a.month;
        if (day != a.day)
            return day < a.day;
        if (hour != a.hour)
            return hour < a.hour;
        
        return minute < a.minute;
    }
    
    inline friend std::istream& operator >> (std::istream& stream, TDate& date)
    {
        char tmp;
        stream >> date.day >> tmp >> date.month >> tmp >> date.hour >> tmp >> date.minute;
        return stream;
    } 
    
    inline TDate& add_minutes(int count)
    {
        minute += count;
        if (minute > 59)
        {
            hour += minute / 60;
            minute %= 60;
        }
        if (hour > 23)
        {
            day += hour / 24;
            hour %= 24;
        }
        while (day > day_in_month(month))
        {
            day -= day_in_month(month);
            ++month;
        }
        return *this;
    }
    
        
    inline int minutes_to(const TDate& date)
    {
        size_t count = 0;
        while (*this < date)
        {
            add_minutes(1);
            
            if (hour >= 18)
            {
                add_minutes(960);
            }
            ++count;
        }
        return count + (hour >= 18) ;
    }
 
};
int main(){
    
    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);
    
    unsigned n;
    std::cin >> n;
    
    TDate * arr = new TDate [n];
    for (size_t i = 0; i < n; ++i)
        std::cin >> arr[i];
    
    std::sort( arr, arr + n );
    
    long long sum = 0;
    for (size_t i = 0; i < n - 1; i += 2)
    {
        sum += arr[i].minutes_to(arr[i+1]);
    }       
    std::cout.fill('0');
    std::cout << sum / 60 << ':' << std::setw(2) << sum % 60;
    
    delete[] arr;
    
    return 0;
}
Конкретно проблема с этой функцией
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
inline int minutes_to(const TDate& date)
    {
        size_t count = 0;
        while (*this < date)
        {
            add_minutes(1);
            
            if (hour >= 18)
            {
                add_minutes(960); //если 18:00, то перехожу на 10:00
            }
            ++count;
        }
        return count + (hour >= 18) ;
    }
Она, очевидно, реализована неправильно, т.к. на первый же тест выдает неправильный ответ.
А именно на этот
Код
4
15.01. 17:00
16.01. 12:00
11.02. 14:00
30.01. 10:00
Должна выводить 130:02, а выводит 130:00.
Пробовал по разному извращаться, но тогда не работали другие тесты.
Например,
Код
2
20.11. 10:27
18.11. 15:13
Ответ: 1:15.
Или
Код
2 
28.02. 17:59 
01.03. 10:00
Ответ: 0:01
Где-то на поверхности лежит элементарное решение, до которого я не могу додуматься...
P.S. структура, вероятно, реализована тоже криво - до этого момента не пытался писать свои классы. Но скоро они мне понадобятся, так что начинаю с мелочей.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru