менять элементы массива С++
Всем пр есть такая задача
на столе в вазе 3 цветка по порядку, роза, тюльпан, ромашка. Каждый день юзер 1 меняет правый крайний цветок с средним местами, а за ним, так же каждый день, юзер2 меняется крайний левый с средним. Юзер вводит кол-во дней, программа выводит порядок цветов.
Пример: Исходный вариант: роза, тюльпан, ромашка спустя день: ромашка, роза ,тюльпан спустя 2 дня: тюльпан, ромашка ,роза и т.д.
#include <iostream>
#include <ctime>
using namespace std;
int main() {
setlocale(LC_ALL, "Russian");
srand(time(0));
string mss[3]{"Роза","Тюльпан","Ромашка"};
int day;
cout << "-> "; cin >> day;
// int l = user.length();
for (int i = 0; i < day; i++)
{
cout << mss[i] << " ";
mss[2] = mss[1];
mss[0] = mss[1];
cout << endl;
}
}
подскажите как ее решить
Ответы (2 шт):
Если считать, как вы, что каждый день оба пользователя делают перестановку, то достаточно
#include <iostream>
using namespace std;
int main()
{
const char * flowers[] = {"Rose", "Tulip", "Chamomile"};
int n;
cin >> n;
n %= 3;
cout
<< flowers[n*(7-3*n)/2] << ", "
<< flowers[n*(3*n-5)/2+1] << ", "
<< flowers[2-n] << endl;
}
Если же пользователи переставляют через день, то тут будет немного сложнее.
Подсказка: распишите несколько дней, что будет - и вы увидите, что сочетания начнут повторяться...
Слишком легкая задача, и расчеты тут не нужны. Всего три элемента и два варианта перестановки, и в итоге 6 вариантов(2 * 3) и 3 элемента. Перестановки индексов можем представить в виде массива:
const int a[6][3] = {
{0, 1, 2},
{2, 1, 0},
{1, 2, 0},
{0, 2, 1},
{2, 0, 1 },
{1, 0, 2}
};
Остается лишь day раз выводить mss[ a[i][j] ] , где 0 < i < 6, 0 < j < 3. Можете представить массив индексов и в виде одномерного массива _ будет проще и меньше писанины.