менять элементы массива С++

Рейтинг: 0Ответов: 2Опубликовано: 18.01.2023

Всем пр есть такая задача

на столе в вазе 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;
}

Если же пользователи переставляют через день, то тут будет немного сложнее.

Подсказка: распишите несколько дней, что будет - и вы увидите, что сочетания начнут повторяться...

▲ 1

Слишком легкая задача, и расчеты тут не нужны. Всего три элемента и два варианта перестановки, и в итоге 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. Можете представить массив индексов и в виде одномерного массива _ будет проще и меньше писанины.