解谜游戏---蓝桥杯练习

哈哈哈,看起来很难其实很简单啦

题目描述

在这里插入图片描述

小明正在玩一款解谜游戏。谜题由 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,代表小明是否可以达成目标。

输入输出样例

输入

	2
	GYGGGGGGGGGG
	RGRRRRRR
	YRYY
	YGGGRRRRGGGY
	YGGGRRRR
	YGGG

输出

	YES
	NO

思路

刚看到图脑子就很懵,这是个啥???

要把所有黄色换到内层,红色换到中层,绿色换到外层。

那行吧,怎么换呢?

外圈 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 games
  color_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")
        return
  print("NO")
  return
for i in range(n):
  con(i)

编码不易,有帮助的话点个赞支持一下吧

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值