ПИТОН!
На дискотеке в ряд стоят три прожектора, которые поочерёдно светят в следующем порядке: левый, средний, правый, средний, левый, средний, правый, средний и т.д. (слева направо, затем налево, опять направо, ...). Каждый прожектор горит в течение одной секунды.
Известно, что лампа левого прожектора имеет ресурс A секунд горения, среднего – B секунд, правого – С секунд. Определите, сколько времени сможет продолжаться этот процесс горения прожекторов.
Входные данные
Программа получает на вход три целых неотрицательных числа A, B, C – время горения левого, среднего, правого прожектора.
Выходные данные
Программа должна вывести одно целое число.
Система оценивания
Решение, правильно работающее только для случаев, когда все входные числа не превосходят 10, будет оцениваться в
Решение, правильно работающее только для случаев, когда все входные числа не превосходят 104, будет оцениваться в
В будет оцениваться решение, правильно работающее, когда сумма всех входных чисел по модулю не превосходит 2×10^9
Пример:
Ввод: 3 3 3
Вывод: 7
Пояснение: прожектора горят в следующем порядке: левый, средний, правый, средний, левый, средний, правый. После этого должен загореться средний прожектор, но он уже выработал ресурс и загореться не сможет. Поэтому процесс обрывается после 7 с.
Первая строка ввода содержит два числа A и B, разделенных пробелом (1 ≤ A, B ≤ 10 000 000).Выведите все возможные значения для количества емкостей по 60 литров, которые окажутся заполненными (в том числе одна возможно частично), в порядке возрастания или число −1, если значения A и B противоречат друг другу, то есть они были записаны неверно.
Теперь к вопросам по форме.
Во-первых, если в условии указаны ограничения на входные данные, им можно верить, проверять, что 1 <= A, B <= 10000000 не обязательно.
Во-вторых, научитесь пользоваться &&, ||, это позволит не дублировать код. 4 раза написанное else Console.WriteLine("-1"); не очень читать.
А уже теперь по сути.
Ваше условие противоречивости условия |50A - 70B| < 50 нехорошее. Если общий объем колы, например, 141, то A = 3, B = 3, но при этом |50A - 70B| = 60, что больше 50.
Смотрю дальше.
если 50A < 70B, то если 50A не делится на 60, то ответ [(50A - 49)/60] + 1 или [50A/60] + 1 (если это одно и то же, не важно). Это тоже как минимум не очевидно: представим, что [(70B-69)/60] + 1 оказался больше, чем [(50A-49)/60] + 1. Тогда ответ точно неверен.
Какие были бы мои рассуждения:
Поищем, какое могло бы быть общее количество колы. Пусть её N, тогда
50(A - 1) < N <= 50A
70(A - 1) < N <= 70B
Тогда max(50A - 50, 70B - 70) < N <= min(50A, 70B).
Если max(50A - 50, 70B - 70) >= min(50A, 70B), то решений нет, надо выводить -1. Иначе думаем дальше.
Строгое неравенство иметь что-то не хочется, сделаем из него нестрогое. Если добавлю к левой части 1, то количество 60-литровых ёмкостей явно не поменяется, зато неравенство станет нестрогим. Пусть так и будет, раз ответ не меняется. Только в проверке равенство поменяю на строгое.
max(50A - 50, 70B - 70) + 1 <= N <= min(50A, 70B)
Теперь просто считаем число ёмкостей слева, справа, и выводим все числа от первого до второго.
Поняв всё это, просто превращаем слова в программу.
using System;
class CocaCola
{
public static void Main (string[] args)
{
int A = int.Parse(Console.ReadLine()),
B = int.Parse(Console.ReadLine());
int lowerLimit = Math.Max(50 * A - 50, 70 * B - 70) + 1;
int upperLimit = Math.Min(50 * A, 70 * B);
if (lowerLimit > upperLimit)
{
Console.Write(-1);
return;
}
for (int i = (int)Math.Ceiling(lowerLimit / 60.0); i <= Math.Ceiling(upperLimit / 60.0); i++)
Console.Write("{0} ", i);
}
}
Ориентирование по Солнцу.
Места восхода и захода Солнца по временам года различны: зимой Солнце восходит на юго-востоке, а заходит на юго-западе; летом Солнце восходит на северо-востоке, а заходит на северо-западе; весной и осенью Солнце восходит на востоке, а заходит на западе. В полдень Солнце всегда находится в направлении юга. Самая короткая тень от местных предметов бывает в 13 часов, и направление тени от вертикально расположенных местных предметов в это время будет указывать на север. Если солнце скрыто облаками, поставьте нож на ноготь пальца - хотя бы небольшая, но тень появится и станет ясно, где солнце.
По Солнцу и часам.
Надо направить часовую стрелку на Солнце, и угол, образуемый между направлением часовой стрелки и цифрой 1 (13 часов) циферблата, разделить воображаемой линией пополам. Линия, разделяющая этот угол, укажет направление: впереди - юг, сзади - север. При этом надо помнить, что до 13 часов нужно делить левый угол, а во вторую половину дня - правый угол.
По Полярной звезде.
Полярная звезда всегда находится на севере.
По Луне.
Для приблизительного ориентирования нужно знать, что летом в первую четверть Луна в 20 часов находится на юге, в 2 часа ночи - на западе, в последнюю четверть в 2 часа ночи - на востоке, в 8 часов утра - на юге. При полнолунии ночью стороны горизонта определяются так же, как по Солнцу и часам, причем Луна принимается за Солнце. Необходимо помнить, что полная Луна противостоит Солнцу, т. е. находится против него.
По тени.
В полдень направление тени (она будет самая короткая) указывает на север. Не дожидаясь самой короткой тени можно ориентироваться следующим Воткните в землю палку около 1 метра длиной. Отметьте конец тени. Подождите 10-15 минут и повторите процедуру. Проведите линию от первой позиции тени до второй и продлите на шаг дальше второй отметки. Станьте носком левой ноги напротив первой отметки, а правой — в конце линии, которую вы начертили. Сейчас вы стоите лицом на север.