Напёрстки
Азартная игра "Напёрстки" - это игра, в которой участники должны угадывать, в каком из нескольких напёрстков находится скрытый под ними предмет (обычно это шарик или монета). Игра в напёрстки обычно проводится между дилером (ведущим игры) и игроками. Дилер перемещает предметы между напёрстками, помешивая их, а затем участники делают ставки на выбор правильного напёрстка. Целью игры является угадать, под каким из напёрстков находится предмет. Игроки выбирают напёрсток, на который ставят свою ставку, и затем дилер поднимает выбранный напёрсток, чтобы показать, была ли ставка успешной. Если игрок угадывает правильный напёрсток, он выигрывает определенную сумму денег или призов. Игра в напёрстки является азартной из-за того, что участники основывают свои ставки на удаче и вероятности, не имея реального влияния на исход игры. Однако, в результате манипуляции дилера или использования ловушек, шансы на победу могут быть изменены в пользу дилера. Важно отметить, что игра в напёрстки может быть связана с риском потери денег, и она часто ассоциируется с играми на деньги или казино. Поэтому перед участием в азартной игре в напёрстки, важно быть осведомленным о своих финансовых возможностях и быть готовым к потенциальной потере.
Задача
Шулер показывает следующий трюк. Он имеет три одинаковых наперстка. Под первый (левый) он кладет маленький шарик. Затем он очень быстро выполняет ряд перемещений наперстков, каждое из которых – это одно из трех перемещений - A, B, C:
· A - обменять местами левый и центральный наперстки,
· B - обменять местами правый и центральный наперстки,
· C - обменять местами левый и правый наперстки.
Необходимо определить, под каким из наперстков окажется шарик после всех перемещений.
Входные данные
Строка длиной не более 50 символов из множества {A, B, C} – последовательность перемещений.
Выходные данные
Нужно вывести номер наперстка, под которым окажется шарик после перемещений.
Пример:
Решение
Эту задачу можно решить непосредственно моделированием при помощи трёх переменных, поочередно применяя к ним swap, однако проще её сделать с помощью таблицы перемещений.
Пронумеруем возможные положения шарика под напёрстками (1 – под напёрстком есть шарик, 0 – нет): 100 – 0, 010 – 1, 001 – 2.
Тогда результаты всех перемещений можно описать при помощи таблицы.
#include <iostream> #include <string> #include <array> int main() { system("chcp 1251>nul"); std::string s; std::cin >> s; int x = 0; std::array<std::array<int, 3>, 3> arr{ { { 1, 0, 2 }, { 0, 2, 1 }, { 2, 1, 0 }}}; for (int i = 0; i<s.size(); i++) { int indexS; if (s[i] == 'A') indexS = 0; else indexS = s[i] == 'B' ? 1 : 2; x = arr[x][indexS]; int tmpx = x; std::cout << "Напёрсток с шариком = " << ++tmpx << "\n"; } std::cout << "Напёрсток с шариком под "<<++x<<"-ым напёрстком\n"; system("pause"); }