本文主要是介绍解谜游戏---蓝桥杯练习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
哈哈哈,看起来很难其实很简单啦
题目描述
小明正在玩一款解谜游戏。谜题由 24 根塑料棒组成,其中黄色塑料棒 4 根,红色 8 根,绿色 12 根 (后面用 Y 表示黄色、R 表示红色、G 表示绿色)。初始时这些塑料棒排成三圈,如上图所示,外圈 12 根,中圈 8 根,内圈 4 根。
小明可以进行三种操作:
1、将三圈塑料棒都顺时针旋转一个单位。例如当前外圈从 0 点位置开始顺时针依次是 YRYGRYGRGGGG,中圈是 RGRGGRRY,内圈是 GGGR。那么顺时针旋转一次之后,外圈、中圈、内圈依次变为:GYRYGRYGRGGG、 YRGRGGRR 和 RGGG。
2、将三圈塑料棒都逆时针旋转一个单位。例如当前外圈从 0 点位置开始顺时针依次是 YRYGRYGRGGGG,中圈是 RGRGGRRY,内圈是 GGGR。那么逆时针旋转一次之后,外圈、中圈、内圈依次变为:RYGRYGRGGGGY、 GRGGRRYR 和 GGRG。
3、将三圈 0 点位置的塑料棒做一个轮换。具体来说:外圈 0 点塑料棒移动到内圈 0 点,内圈 0 点移动到中圈 0 点,中圈 0 点移动到外圈 0 点。例如当前外圈从 0 点位置开始顺时针依次是 YRYGRYGRGGGG,中圈是 RGRGGRRY,内圈是 GGGR。那么轮换一次之后,外圈、中圈、内圈依次变为:RRYGRYGRGGGG、GGRGGRRY 和 YGGR。
小明的目标是把所有绿色移动到外圈、所有红色移动中圈、所有黄色移动到内圈。给定初始状态,请你判断小明是否可以达成目标?
输入描述
第一行包含一个整数 T (1≤T≤100),代表询问的组数。
每组询问包含 3 行:
第一行包含 12 个大写字母,代表外圈从 0 点位置开始顺时针每个塑料棒的颜色。
第二行包含 8 个大写字母,代表中圈从 0 点位置开始顺时针每个塑料棒的颜色。
第三行包含 4 个大写字母,代表内圈从 0 点位置开始顺时针每个塑料棒的颜色。
输出描述
对于每组询问,输出一行 YES 或者 NO,代表小明是否可以达成目标。
输入输出样例
输入
2GYGGGGGGGGGGRGRRRRRRYRYYYGGGRRRRGGGYYGGGRRRRYGGG
输出
YESNO
思路
刚看到图脑子就很懵,这是个啥???
要把所有黄色换到内层,红色换到中层,绿色换到外层。
那行吧,怎么换呢?
外圈 0 点塑料棒移动到内圈 0 点,内圈 0 点移动到中圈 0 点,中圈 0 点移动到外圈 0 点。
那我想是什么顺序能进行一次操作就形成,G,R,Y的顺序呢?
Y G R —> G R Y
那什么顺序进行一次操作能形成Y G R呢?
R Y G—>Y G R
那什么顺序进行一次操作能形成 R Y G呢?
G R Y—>R Y G
这形成了一个循环
那么只要外层的0点、中层的0点、内层的0点形成R Y G 或者Y G R我们就能使他们变换成G R Y的顺序
所以我们要不断的转直到出现那两种顺序中的一种
跳出循环的两种方式
1、所有的绿色都在外层,所有的红色都在中层,所有的黄色都在内层。
2、外层有12个,中层有8个,内层有4个,所以取他们的最小公倍数24,也就是说如果转了24次还没成功那么就不可能成功了。
代码
import os
import sys# 请在此输入您的代码n=int(input())
games=[]
for i in range(n):games.append([])for j in range(3):games[-1].append(input())def con(num):global gamescolor_1=list(games[num][0])color_2=list(games[num][1])color_3=list(games[num][2])for i in range(24):if (color_1[0]=='R' and color_2[0]=='Y' and color_3[0]=='G') or (color_1[0]=='Y' and color_2[0]=='G' and color_3[0]=='R') or (color_1[0]=='G' and color_2[0]=='R' and color_3[0]=='Y'):color_1[0]='G'color_2[0]='R'color_3[0]='Y' temp_1=color_1[0]del color_1[0]color_1.append(temp_1)temp_2=color_2[0]del color_2[0]color_2.append(temp_2)temp_3=color_3[0]del color_3[0]color_3.append(temp_3)if 'Y' not in color_1 and 'R' not in color_1:if 'G' not in color_2 and 'Y' not in color_2:if 'G' not in color_3 and 'R' not in color_3:print("YES")returnprint("NO")return
for i in range(n):con(i)
编码不易,有帮助的话点个赞支持一下吧
这篇关于解谜游戏---蓝桥杯练习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!