Цветок

В рождественский вечер на окошке стояло три цветочка, слева на право: герань, крокус и фиалка. Каждое утро Маша вытирала окошко и меняла местами стоящий справа цветок с центральным цветком. А Таня каждый вечер поливала цветочки и меняла местами левый и центральный цветок. Требуется определить порядок цветов ночью по прошествии K дней. Требуется вывести три латинских буквы: «G», «C» и «V» (заглавные буквы без пробелов), описывающие порядок цветов на окошке по истечении K дней (слева направо). Обозначения: G – герань, C – крокус, V – фиалка.

Пожалуй здесь нужно разобрать задачу детально.

  • В начале первого дня мы имеем комбинацию "CVG"
  • В конце первого дня - "VGC"
  • В конце второго дня - "GCV"
  • В конце третьего дня - "CVG"
  • Если продолжить до бесконечности (или достаточно долго), то можно убедиться, что комбинаций всего 3. В принципе максимальное количество комбинаций всех элементов множества равно количеству элементов этого множества.
  • Если за точку отсчета брать не конец дня, как в условии задачи, а начало следующего, то мы получим массив, где номер элемента равен количеству дней - 1. DAYS = ["CVG", "VGC", "GCV", "CVG", "VGC", "GCV"...]. Т.е. DAYS[1] - это комбинация в конце первого дня, DAYS[2] - второго и т.д.
  • Так как мы видим периодичность и период, равный трем, то можем сократить количество элементов до тех же трех. DAYS = ["CVG", "VGC", "GCV"]. Тогда остаток от деления данного дня на 3 даст нам номер элемента массива, под которым у нас нужная комбинация.

А вот и решение...

#include <iostream>

main(){
	int D;
	char *DAYS[] = {"GCV", "VGC", "CVG"};
	std::cin >> D;
	std::cout <<  DAYS[D % 3];
}