Задача: Время обслуживания. Для каждого посетителя парикмахерской (с одним мастером) известны следующие величины: [latex]t[/latex] — момент его прихода и [latex]\tau[/latex] — продолжительность его обслуживания. Сколько клиентов обслужит мастер за смену продолжительностью [latex]T[/latex]? Сколько рабочего времени он потратит на обслуживание?
[latex]T[/latex] | t1 | t2 | k | T1 |
600 | 200 210 500 550 | 50 300 10 50 | 4 | 410 |
600 | 50 100 200 498 550 | 30 50 200 10 40 | 5 | 330 |
600 | 0 80 100 367 680 | 20 30 20 30 50 | 4 | 100 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#include <iostream> using namespace std; int main() { int t1, t2, T2, T; T2 = 0; int k = 0; scanf ("%d", &T); //Задаем продолжительность смены парикмахера int T1 = 0; while ( EOF!=scanf("%d%d", &t1, &t2) ) { t1 = max(t1, T2); //Выбираем максимальное из времени прихода текущего клиента и ухода предыдущего if ( (t1>T) || (T2>T) ) break;//Условие выхода из цикла T2 = t1 + t2; //Расчетное время ухода предыдущего клиента T1 += t2; //Считаем общее время обслуживания k += 1; //Считаем количество обслуженных клиентов } printf("%d\n%d", k, T1); return 0; } |
Поздравляю! Это 100-е юбилейное решение на сайте. Какой бы бонус предложить автору 100-го сообщения?
Логика программы правильная, но есть замечания:
— пробелы перед открывающими скобками везде отсутствуют.
— «не пришел ли текущий клиент раньше предыдущего». Нет, такое невозможно. Клиенты появляются во входном файле в порядке их появления в парикмахерской. Новый клиент всегда приходит позже старого. Но иногда до того, как старого постригут.
Исправил.
Сразу скажу, что если время прихода клиента задаётся положительным числом, то всё отлично сработает. Но….
— При первом витке цикла в 12-й строке переменным t12 и T2 ещё не присвоено значение. Надо бы до этого сравнения присвоить что-то разумное.
— Поправьте отступ в строке 9.
— Во фразе «нашим количеством» я бы ограничился просто «количеством», но это дело автора.
— T2 — это расчётное время ухода предыдущего клиента? Напишите в комментарии.
— Зачем проверять t1 < t12? Следующий клиент приходит после предыдущего. В этом смысл слов «следующий» и «предыдущий». Т.е. это условие всегда false и значит ничему не мешает. Но запутывает. Я бы убрал. В пояснении Вы это убрали, а в программе осталось.
— В 12-й строке: t1 = t12 + t22 это просто t1 = T2? Т.е. вся строка эквивалентна выражению t1 = max(t1, T2)? Мне кажется, это будет понятнее.
Теперь вроде бы все учел.
Да, мне тоже так кажется.
Зачтено.