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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
AlisherIITU
2 / 2 / 1
Регистрация: 10.09.2013
Сообщений: 129
#1

Сортировка времени - C++

04.10.2013, 22:05. Просмотров 1026. Ответов 3
Метки нет (Все метки)

Time sorting

From input your program have to read N (1<=N<=100) - the total number of time interval than have to be sorted. Each line contains data in following format HH MM SS
HH (hours) - from 0 to 23
MM (minutes) - from 0 to 60
SS (seconds) - from 0 to 60

The output have to contain time intervals in nondescending order in give format.

Input sample:
4
10 20 30
7 30 00
23 59 59
13 30 30

Output sample:
7 30 0
10 20 30
13 30 30
23 59 59
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.10.2013, 22:05     Сортировка времени
Посмотрите здесь:

C++ Сортировка подсчетом и LSD сортировка
C++ Сортировка времени.
C/C++ FAQ :: Быстрая сортировка (сортировка Хоара) C++
Быстрая сортировка(сортировка Хоара). Отсортировать фрагмент массива C++
Пирамидальная сортировка и сортировка Шелла C++
2 сортировки: пирамидальная сортировка и сортировка слиянием C++
Быстрая сортировка (сортировка Хоара) для связных списков C++
C++ Сортировка слиянием. В каком куске кода происходит сортировка и каким именно образом?
C++ Сортировка Шелла. Написал программу, не могу понять, почему сортировка не выполняется
Быстрая сортировка (сортировка методом Хоара) C++
C++ Проверка на правильность времени, и показ времени
C++ Сортировка Шелла и пирамидальная сортировка для символов

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
anmartex
...
 Аватар для anmartex
1700 / 1193 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
05.10.2013, 13:20     Сортировка времени #2
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <stdexcept>
#include <algorithm>
 
struct TTime
{
    int HH;
    int MM;
    int SS;
};
 
//-----------------------------------------------------------------------------
std::istream& operator >> (std::istream& in, TTime& time)
{
    in >> time.HH >> time.MM >> time.SS;
 
    return in;
}
//-----------------------------------------------------------------------------
std::ostream& operator << (std::ostream& out, const TTime& time)
{
    out << time.HH << " " << time.MM << " " << time.SS;
 
    return out;
}
//-----------------------------------------------------------------------------
std::ostream& operator << (std::ostream& out, const std::vector<TTime>& list)
{
    std::vector<TTime>::const_iterator it = list.begin();
 
    for (; it != list.end(); ++it)
    {
        out << *it << std::endl;
    }
 
    return out;
}
//-----------------------------------------------------------------------------
void ReadRecords(std::ifstream& f, std::vector<TTime>& list) throw(std::runtime_error)
{
    int i = list.size();
 
    TTime time;
 
    while ((f >> time) && (i-- > 0))
    {
        list[i] = time;
    }
 
    if (i > 0)
    {
        throw std::runtime_error("unexpected end of file ...");
    }
}
//-----------------------------------------------------------------------------
std::vector<TTime> GetTimeList(const std::string& fname) throw(std::runtime_error)
{
    std::ifstream f(fname.c_str());
 
    if (f.is_open() == false)
    {
        throw (std::runtime_error(fname + ": file is not open ..."));
    }
 
    int n;
 
    if ((f >> n) == NULL)
    {
        throw (std::runtime_error(fname + ": unknow format ..."));
    }
 
    if ((n < 1) || (100 < n))
    {
        throw (std::runtime_error(fname + ": count record must be [1..100] ..."));
    }
 
    std::vector<TTime> list(n);
 
    try
    {
        ReadRecords(f, list);
    }
    catch (const std::runtime_error& error)
    {
        throw (std::runtime_error(fname + ": " + error.what()));
    }
 
    return list;
}
//-----------------------------------------------------------------------------
bool TimeCompare(const TTime& a, const TTime& b)
{
    int compare = b.HH - a.HH;
 
    if (compare == 0)
    {
        compare = b.MM - a.MM;
    }
 
    if (compare == 0)
    {
        compare = b.SS - a.SS;
    }
 
    return (compare > 0);
}
//-----------------------------------------------------------------------------
 
int main(int argc, char* argv[])
{
    if (argc != 2)
    {
        std::cerr << "Usage: program <FILE>" << std::endl;
        return 1;
    }
 
    std::vector<TTime> list;
 
    try
    {
        list = GetTimeList(argv[1]);
    }
    catch (const std::runtime_error& error)
    {
        std::cerr << error.what() << std::endl;
        return 1;
    }
 
    std::sort(list.begin(), list.end(), TimeCompare);
 
    std::cout << list << std::endl;
 
    return 0;
}


Сортировка времени
Somebody
2775 / 1589 / 142
Регистрация: 03.12.2007
Сообщений: 4,162
Завершенные тесты: 1
05.10.2013, 14:12     Сортировка времени #3
Уже было. Только там в олимпиадном стиле, всё по минимуму, без проверок на ошибки.
AlisherIITU
2 / 2 / 1
Регистрация: 10.09.2013
Сообщений: 129
05.10.2013, 20:02  [ТС]     Сортировка времени #4
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
#include <iostream>
using namespace std;
 
int main ()
{
    int n;
    int **mas;
    cin >> n;
    mas = new int*[n];
    for (int i=0; i<n; i ++)
    {
        mas[i] = new int[3];
    }
 
    for (int i=0; i<n; i++)
    {
        for (int j=0; j<3; j++)
        {
            cin >> mas[i][j];
        }
    }
    for (int i=0; i<n-1; i++)
    {
        for (int j=i; j<n; j++)
        {
            if (mas[i][0] > mas[j][0])
            {
                swap(mas[i][0], mas[j][0]);
                swap(mas[i][1], mas[j][1]);
                swap(mas[i][2], mas[j][2]);
            }
            else if (mas[i][0] == mas[j][0])
            {
                if (mas[i][1] > mas[j][1])
                {
                    swap(mas[i][0], mas[j][0]);
                    swap(mas[i][1], mas[j][1]);
                    swap(mas[i][2], mas[j][2]);
                }
                else if (mas[i][1] == mas[j][1])
                {
                    if (mas[i][2] > mas[j][2])
                    {
                        swap(mas[i][0], mas[j][0]);
                        swap(mas[i][1], mas[j][1]);
                        swap(mas[i][2], mas[j][2]);
                    }
                }
            }
        }
    }
    for (int i=0; i<n; i++)
    {
        for (int j=0; j<3; j++)
        {
            cout << mas[i][j] << " ";
        }
        cout << endl;
    }
    return 0;
}
Что обозначают в 7 и 9 строке, объясните и как можно по-другому записать более понятнее

Добавлено через 1 минуту
Цитата Сообщение от anmartex Посмотреть сообщение
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <stdexcept>
#include <algorithm>
 
struct TTime
{
    int HH;
    int MM;
    int SS;
};
 
//-----------------------------------------------------------------------------
std::istream& operator >> (std::istream& in, TTime& time)
{
    in >> time.HH >> time.MM >> time.SS;
 
    return in;
}
//-----------------------------------------------------------------------------
std::ostream& operator << (std::ostream& out, const TTime& time)
{
    out << time.HH << " " << time.MM << " " << time.SS;
 
    return out;
}
//-----------------------------------------------------------------------------
std::ostream& operator << (std::ostream& out, const std::vector<TTime>& list)
{
    std::vector<TTime>::const_iterator it = list.begin();
 
    for (; it != list.end(); ++it)
    {
        out << *it << std::endl;
    }
 
    return out;
}
//-----------------------------------------------------------------------------
void ReadRecords(std::ifstream& f, std::vector<TTime>& list) throw(std::runtime_error)
{
    int i = list.size();
 
    TTime time;
 
    while ((f >> time) && (i-- > 0))
    {
        list[i] = time;
    }
 
    if (i > 0)
    {
        throw std::runtime_error("unexpected end of file ...");
    }
}
//-----------------------------------------------------------------------------
std::vector<TTime> GetTimeList(const std::string& fname) throw(std::runtime_error)
{
    std::ifstream f(fname.c_str());
 
    if (f.is_open() == false)
    {
        throw (std::runtime_error(fname + ": file is not open ..."));
    }
 
    int n;
 
    if ((f >> n) == NULL)
    {
        throw (std::runtime_error(fname + ": unknow format ..."));
    }
 
    if ((n < 1) || (100 < n))
    {
        throw (std::runtime_error(fname + ": count record must be [1..100] ..."));
    }
 
    std::vector<TTime> list(n);
 
    try
    {
        ReadRecords(f, list);
    }
    catch (const std::runtime_error& error)
    {
        throw (std::runtime_error(fname + ": " + error.what()));
    }
 
    return list;
}
//-----------------------------------------------------------------------------
bool TimeCompare(const TTime& a, const TTime& b)
{
    int compare = b.HH - a.HH;
 
    if (compare == 0)
    {
        compare = b.MM - a.MM;
    }
 
    if (compare == 0)
    {
        compare = b.SS - a.SS;
    }
 
    return (compare > 0);
}
//-----------------------------------------------------------------------------
 
int main(int argc, char* argv[])
{
    if (argc != 2)
    {
        std::cerr << "Usage: program <FILE>" << std::endl;
        return 1;
    }
 
    std::vector<TTime> list;
 
    try
    {
        list = GetTimeList(argv[1]);
    }
    catch (const std::runtime_error& error)
    {
        std::cerr << error.what() << std::endl;
        return 1;
    }
 
    std::sort(list.begin(), list.end(), TimeCompare);
 
    std::cout << list << std::endl;
 
    return 0;
}


Вложение 313685
Спасибо тебе, но мне такой код не понятен
Yandex
Объявления
05.10.2013, 20:02     Сортировка времени
Ответ Создать тему
Опции темы

Текущее время: 06:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru