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
|
Ще запазим броя автобусни линии в глобална константа LINES и
максималния брой спирки в глобална константа MAX_STOPS.
Не ни е дадена връзка между посока на пътуване на автобусите.
Ще допуснем, че те не са значими за нашето решение.
int maxSeatsTaken(int gettingOn[MAX_STOPS], int gettingOff[MAX_STOPS]);
Линейно итерираме през gettingOn и gettingOff едновременно (един цикъл с един индекс).
Започвайки от първата спирка (на индекс 0), събираме броя хора, които са се качили и
изваждаме броя които са слезли.
Разликата добавяме в int променлива totalSeats, която се инициализира с 0.
Аналогично пазим променлива maxSeats (също инициализирана на 0). На всяка итерация,
след като добавим към totalSeats, проверяваме дали е повече от maxSeats.
Ако е - записваме стойността в maxSeats.
Накрая връщаме maxSeats.
unsigned int seatsToBusSize(int seats);
Дефинираме променлива busSize със стойност 14.
С цикъл, докато busSize е по-малко от входните seats,
добавяме 6 към busSize.
Когато стигнем нужната бройка, цикъла спира и връщаме busSize.
int main();
Декларираме две матрици, gettingOn и gettingOff, с размери LINES на MAX_STOPS.
От входа получаваме, за всяка линия, първо броя спирки, след това алтерниращо
колко хора се качват и колко хора слизат.
Попълваме съответните стойности в двете матрици. Ако броя спирки е по-малко от
максимума (17), тогава попълваме останалите клетки с нули.
Итерираме през всички линии.
За всяка линия, извикваме maxSeatsTaken, като подаваме съответните "подмасиви"
от gettingOn и gettingOff на индекс текущата линия.
Резултата го подаваме на seatsToBusSize и от него изкарваме размера на автобуса
на екрана.
|