这道题评测有点问题(评测点的输出全正确,结果正确率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]])