试题 历届真题 魔方旋转问题【历届真题】【决赛】【高职组】

这道题评测有点问题(评测点的输出全正确,结果正确率0%)
试题 历届真题 魔方旋转问题【历届真题】【决赛】【高职组】

资源限制
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
问题描述
  魔方可以对它的6个面自由旋转。

我们来操作一个2阶魔方,如图:
在这里插入图片描述
  为了描述方便,我们为它建立了坐标系。

各个面的初始状态如下:
  x轴正向:绿
  x轴反向:蓝
  y轴正向:红
  y轴反向:橙
  z轴正向:白
  z轴反向:黄

假设我们规定,只能对该魔方进行3种操作。分别标记为:
  x 表示在x轴正向做顺时针旋转
  y 表示在y轴正向做顺时针旋转
  z 表示在z轴正向做顺时针旋转

xyz 则表示顺序执行x,y,z 3个操作
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  题目的要求是:
  用户从键盘输入一个串,表示操作序列。
  程序输出:距离我们最近的那个小方块的3个面的颜色。
  顺序是:x面,y面,z面。
输入输出用例
  例如:在初始状态,应该输出:
  绿红白

初始状态下,如果用户输入:
  x
  则应该输出:
  绿白橙

初始状态下,如果用户输入:
  zyx
  则应该输出:
  红白绿

解题步骤:全部存储,x,y,z旋转时分别交换旋转前后位置变化的色块
直接上代码:

mo={1:'绿',2:'蓝',3:'红',4:'橙',5:'白',6:'黄'}
m=[[1]*4,[2]*4,[3]*4,[4]*4,[5]*4,[6]*4]
ops=input("")
for op in ops:
    if op=='x':
        yt1=m[2][0]
        yt2=m[2][2]
        m[2][0]=m[4][2]
        m[2][2]=m[4][3]
        m[4][2]=m[3][3]
        m[4][3]=m[3][1]
        m[3][3]=m[5][3]
        m[3][1]=m[5][2]
        m[5][3]=yt1
        m[5][2]=yt2
        x1=m[0][0]
        m[0][0]=m[0][2]
        m[0][2]=m[0][3]
        m[0][3]=m[0][1]
        m[0][1]=x1
    elif op=='y':
        xt1=m[0][1]
        xt2=m[0][3]
        m[0][1]=m[5][3]
        m[0][3]=m[5][1]
        m[5][3]=m[1][3]
        m[5][1]=m[1][1]
        m[1][3]=m[4][1]
        m[1][1]=m[4][3]
        m[4][1]=xt1
        m[4][3]=xt2
        y1=m[2][0]
        m[2][0]=m[2][2]
        m[2][2]=m[2][3]
        m[2][3]=m[2][1]
        m[2][1]=y1
    else:
        yt1=m[2][0]
        yt2=m[2][1]
        m[2][0]=m[1][1]
        m[2][1]=m[1][0]
        m[1][1]=m[3][0]
        m[1][0]=m[3][1]
        m[3][0]=m[0][0]
        m[3][1]=m[0][1]
        m[0][0]=yt1
        m[0][1]=yt2
        z1=m[4][0]
        m[4][0]=m[4][2]
        m[4][2]=m[4][3]
        m[4][3]=m[4][1]
        m[4][1]=z1
print(mo[m[0][1]]+mo[m[2][0]]+mo[m[4][3]])
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值