华为机试二星题--转骰子
标题: 转骰子 | 时间限制: 1秒 | 内存限制: 262144K | 语言限制: 不限
骰子是一个立方体,每个面一个数字,初始为左1,右2,前3(观察者方向),后4,上5,下6,用123456表示这个状态,放置到平面上,可以向左翻转(用L表示向左翻转1次),可以向右翻转(用R表示向右翻转1次),可以向前翻转(用F表示向前翻转1次),可以向后翻转(用B表示向后翻转1次),可以逆时针旋转(用A表示逆时针旋转90度),可以顺时针旋转(用C表示顺时针旋转90度),现从123456这个初始状态开始,根据输入的动作序列,计算得到最终的状态。
骰子的初始状态和初始状态转动后的状态如图所示
这个题还是比较简单 找到规律字符串切片就行了 python3的代码如下:
规律就是L-R相对应,1L=3R,4圈变回初始状态,所以直接对4求余,初始状态123456,
L-563421
2L-213465
3L-653412
0/4L-123456
F-125643
2F-1254365
3F-126534
A-431256
2A-214356
3A-342156
2L-213465
3L-653412
0/4L-123456
F-125643
2F-1254365
3F-126534
A-431256
2A-214356
3A-342156
n=input() s='123456' d={} d['A']=(n.count('A')-n.count('C'))%4 d['L']=(n.count('L')-n.count('R'))%4 d['F']=(n.count('F')-n.count('B'))%4 while d['A']>0: s=s[3:1:-1]+s[:2]+s[4:] d['A']-=1 while d['L']>0: s=s[4:]+s[2:4]+s[1::-1] d['L']-=1 while d['F']>0: s=s[:2]+s[4:]+s[3:1:-1] d['F']-=1 print(s)