
Срочно!!! Яблука У Козака Вуса є нескінченна кількість зелених, жовтих та червоних яблук. Він
буде їх виставляти в один ряд за наступним алгоритмом: Спочатку g зелених яблук, потім y жовтих, потім r червоних, потім y жовтих, потім g зелених, а потім все знову нескінченну кількість разів. Наприклад, якщо g=1, y=3, r=4, то перші яблука виглядатимуть так: GYYYRRRRYYYGGYYYRRRRYYYGGYYYRRR... Тобто, всі яблука можна розбити на блоки. На цьому малюнку один блок це GYYYRRRRYYYG. Зверніть увагу, що блок починається і закінчується на один й той же символ. Саме тому на першому малюнку йдуть дві G підряд попри те, що g=1. Знайдіть колір яблука, що знаходиться на n-ій позиції. Вхідні дані Перший рядок містить чотири цілі числа n, g, y, r (1≤n,g,y,r≤10 12 ). Зверніть увагу, що числа не вміщаються у 32-бітні цілочисельні типи даних. Тому потрібно використовувати 64-бітні цілочисельні типи даних, такі як long long в C++, long в Java чи int64 в Pascal. Вихідні дані Якщо колір буде зелений, то виведіть «G». Якщо колір буде жовтий, то виведіть «Y». Якщо колір буде червоний, то виведіть «R». Приклади Нижче ви знайдете приклади вхідних даних та відповідей, які має вивести ваша програма. Вхідні дані №1 1 1 3 4 Відповідь №1 G Вхідні дані №2 2 1 3 4 Відповідь №2 Y n, g, y, r = map(int, input().split()) c = 0 # todo print(c)

Ответы на вопрос

Ответ:
На 72 балла
n, g, y, r = map(int, input().split())
c = 0
e=g*2+y*2+r
while n>g*2+y*2+r:
n=n-e
if n <= g or g+y*2+r < n:
print('G')
elif g < n <= g+y or g+y+r < n <= g+2*y+r:
print('Y')
elif g+y < n <= g+y+r:
print('R')
else:
print('no')
Объяснение:



Алгоритм розхождений яблук виглядає наступним чином: спочатку додаються g зелених яблук, потім y жовтих, потім r червоних, потім знову y жовтих, потім знову g зелених і так далі, нескінченну кількість разів.
У завданні потрібно знайти колір яблука, яке знаходиться на n-ій позиції.
Наприклад, якщо g=1, y=3, r=4, то перші яблука будуть виглядати так: gyyyrrrryyyggyyyrrrryyyggyyyrrr...
Програма може бути написана наступним чином:
n, g, y, r = map(int, input().split()) # введення значень n, g, y, r
colors = ['g', 'y', 'r'] # список кольорів index = 0 c = 0 # ініціалізація змінної для збереження результату
while n > 0: # доки не досягнуто n-ої позиції index %= (g + y + r) # визначення індексу кольору у списку colors if colors[index] == 'g' and n >= g: # якщо колір зелений і є достатньо ще зелених яблук c = 'g' # зберігаємо колір n -= g # зменшуємо n на кількість зелених яблук elif colors[index] == 'y' and n >= y: # якщо колір жовтий і є достатньо ще жовтих яблук c = 'y' # зберігаємо колір n -= y # зменшуємо n на кількість жовтих яблук elif colors[index] == 'r' and n >= r: # якщо колір червоний і є достатньо ще червоних яблук c = 'r' # зберігаємо колір n -= r # зменшуємо n на кількість червоних яблук index += 1 # збільшуємо індекс кольору на 1
print(c) # виведення результату
У даному коді змінна n означає позицію яблука, яке потрібно знайти. Змінні g, y, r означають кількість зелених, жовтих і червоних яблук відповідно.
Програма виконує пошук яблука, враховуючи послідовність зміни кольорів відповідно до алгоритму. Після визначення кольору яблука зберігається у змінній c, і програма знаходиться на іншій ітерації. Коли досягається n-а позиція, програма виводить значення c.
Наприклад, при введенні 2 1 3 4 програма виведе 'y', оскільки на другій позиції знаходиться жовте яблуко.


Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili