Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 4
1

задача про включатель

06.09.2017, 18:10. Просмотров 671. Ответов 4
Метки нет (Все метки)


Добрый вечер! Возникла проблема с решением данной задачи, был бы очень благодарен, если поможете решить Допустим есть выключатель (начальное положение вкл), мимо него проходят люди, которые делятся на a (тех, кто никогда не меняет положение выключателя), b (тех, кто меняет всегда), c (меняют, если выкл, иначе не меняют), d (меняют если вкл, иначе не меняют). Известно что прошло a, b, c и d людей соответсвующих типов. Какое наименьшее число раз может измениться положение выключателя, пока люди в произвольном порядке пройдут мимо него. На вводе задаем значение a b c d, на выводе получаем 1 число - минимальное число переключений.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.09.2017, 18:10
Ответы с готовыми решениями:

Задача про квадранты
Есть задачка: "На плоскости задана прямоугольная система координат с осями X и Y, которая делит...

Задача про карлсона
N спонсоров предложили Карлсону в подарок по бочке меда. Дело за малым - облететь их всех и...

Задача про дороги
Помогите решить задачку: Файл входных данных Z5.DAT Файл результатов Z5.SOL Файлы решения...

Задача про номинал
У вас есть неограниченное количество купюр номиналом 100, 50 и 5 рублей. Какими способами вы...

4
0 / 0 / 0
Регистрация: 07.04.2015
Сообщений: 55
06.09.2017, 19:34 2
А есть какое-либо требование в последовательности прохождения людей? Скажем сразу прошел a, потом b, и только потом опять a? Иначе если мы введем к примеру d = 5, то первый человек выключатель поменяет на выкл, а остальные 4 пройдут мимо. И неважно, введем мы 5 человек, или 500, остальные все равно пойдут мимо.
0
Платежеспособный зверь
8736 / 4154 / 1604
Регистрация: 28.10.2009
Сообщений: 11,229
06.09.2017, 21:29 3
Поскольку требуется найти наименьшее число переключений, порядок прохождения людей будем выбирать мы.
Понятно, что люди типа а никак не влияют на число переключений, их просто не учитываем.
Каждый из людей типа b обязательно переключит, так что b переключений уже есть.
Осталось минимизировать переключения людей типа с и d.
План действий такой:
1. Запускаем всех людей типа с. Они не меняют положение выключателя.
2. Запускаем всех людей типа b. Они делают b переключений.
3. Если людей типа b было нечётное количество, они оставляют включатель выключенным и идущая после них группа d проходит мимо, не трогая выключатель. В противном случае первый из группы d переключит выключатель, остальные пройдут мимо.
Таким образом, минимальное число переключений=b (если людей типа b - нечётное количество) или b+1 если чётное.

Примерная программа:

Pascal
1
2
3
4
5
6
7
var
a,b,c,d,kol:integer;
begin
readln(a,b,c,d);
if b mod 2=0 then kol:=b else kol:=b+1;
writeln(kol);
end.
1
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 4
06.09.2017, 21:45  [ТС] 4
Спасибо, все работает, с начала не понял, что мы сами тут выбираем последовательность.
0
Платежеспособный зверь
8736 / 4154 / 1604
Регистрация: 28.10.2009
Сообщений: 11,229
07.09.2017, 10:00 5
Цитата Сообщение от Ol_kale Посмотреть сообщение
Спасибо, все работает
Немного поразмыслив, я улучшил алгоритм. Теперь он выглядит так:
1. Если людей типа b нет, количество переключений=1 (сначала идут все люди типа с, не меняющие положения выключателя, затем люди типа d, первый из которых выключит выключатель, остальные не тронут его).
2. Если люди типа b есть, то сначала, как и прежде, идут люди типа с, не меняющие положения выключателя, затем 1 человек из группы b, выключающий выключатель, затем все люди из группы d, не трогающие выключатель, и заканчивают оставшиеся участники типа b, переключающие выключатель. Таким образом, мы уменьшаем количество переключений до b
Программа:
Pascal
1
2
3
4
5
6
7
var
a,b,c,d,kol:integer;
begin
readln(a,b,c,d);
if b=0 then kol:=1 else kol:=b;
writeln(kol);
end.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.09.2017, 10:00

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Задача про доски
Помогите решить задачку: Имеется N досок разной длины. Из них нужно выпилить K одинаковых досок...

задача про массивы
помогите сделать задачу: ввести массив D из 5 целых чисел с помощью типизированных констант,массив...

Задача про автомобиль
Вообщем, задача одна не из лёгких, во всяком случае для меня. Для тех, кто любит поломать голову и...

Задача про Незнайку
Незнайка считает, что операция «увеличить» число означает увеличить каждую его цифру, а может быть...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.