Требуется отмерить t минут, потратив на это минимальное количество времени. Для этих целей есть двое песочных часов, первые из которых могут отмерять k минут, а вторые — m минут. — QBasic(Бейсик)

Песок в этих часах сыпется неравномерно, и поэтому точно время можно определить, только когда песок в часах пересыпается полностью.
Требуется написать программу, которая по заданным k, m и t (все числа натуральные и не превышают 32000) определяет общее количество времени, которое понадобилось для измерения времени (если это возможно).
Например, k=3, m=2 и требуется отмерить t=5 минут. Сначала устанавливаем первые часы, после полного пересыпания песка устанавливаем вторые часы, в итоге отмеряем 5 минут. Если этими же часами нужно отмерить одну минуту, то одновременно ставятся первые и вторые часы, затем, в момент полного пересыпания песка в часах на 2 мин., устанавливается начало отсчета измеряемого времени, в момент полного пересыпания песка в часах на 3 мин. заканчиваем измерение одной минуты. Таким образом, на измерение одной минуты было затрачено 3 минуты.

Формат входных данных:
С клавиатуры вводится три числа k, m, t (1 <= k, m , t <= 32000).
Формат выходных данных:
На экран выводится целое число – время, затраченное на то, чтобы отмерить заданный промежуток. Если отмерить t минут невозможно, то следует напечатать строку «NO» (без кавычек).
CLS
INPUT "vv a ", a
INPUT "vv b ", b
INPUT "vv t ", t
IF a < b THEN SWAP a, b
FOR i = 0 TO t + a
    FOR j = 0 TO t + a
        IF i * a + j * b = t THEN rez = i * a + j * b: f = 1
    NEXT
NEXT
FOR i = 0 TO t + a
    FOR j = 0 TO t + a
        IF f = 0 THEN IF i * a + j * b + (a - b) = t THEN rez = i * a + j * b + a:
    NEXT
NEXT
IF rez = 0 THEN PRINT "no" ELSE PRINT rez

Тестирование выполнено в программе QB64 ( Скачать )

Leave a Comment