Problem H: 遥控小车 (未完
Problem Description
爸爸给小明买了一个玩具小车,是通过手柄遥控的,小明在一个房间里面用手柄控制小车,手柄上面的按键有启动键、停止键、四个方向键和一个加速键。已知小车的正常速度为1个单位长度/秒,当第一次按下加速键后,速度变为原来的两倍,即2个单位长度/秒,当下一次按下加速键的时候,速度就恢复为初始的正常速度,再次按下的时候又会加速,依次类推。
为了简单起见,该房间可以看作一个边长为50个单位长度的正方形,且把左下角的坐标视为(0,0),即原点,默认小车的起始位置始终都在原点。
在某个时刻,小明按下启动键,此时记为0时刻,小车就默认向上方出发,小明可以在小车运行的过程中,通过按键改变小车的方向(上,下,左,右),也可以通过按加速键使小车加速或者恢复正常的速度,经过50秒后按下停止键,求此时小车的坐标。
由于这个房间的四周都是墙壁,如果某个时刻小车运行到墙壁边缘,且方向是面对墙壁的,那么小车是没有办法继续前进的,只能在原地挣扎直到小明通过按键改变它的方向。
Input Description
每个测试样例第一行为一个正整数n(n<=20)表示在小车运行中小明对于小车的控制操作次数,当n为0时,测试结束。
接下来有n行,每行有一个整数k(0<k<50)和一个字符c(c只能为U、D、L、R、A中的一种)。其中k代表操作小车的时刻,c代表操作的类型,U代表方向向上,D代表方向向下,L代表方向向左,R代表方向向右,A代表加速或者恢复原来的速度。
Output Description
每一个样例对应的输出为一行,输出停止键按下时小车的坐标。输出格式为整数m和整数n(0<=m,n<=50),代表小车的横坐标和纵坐标。
Sample Input
1
30 R
4
10 D
20 A
30 A
40 L
0
Sample Output
20 30
0 0
没有ac的代码。。。有没有大神指点一下
1 # 传入字符串和a的下一个命令的时间,当前位置(x,y) 2 # a时间-b时间,按b的方向走,无加速情况,需传入速度v值 3 def move(x,y,a,b,v): 4 # 修改为int型 5 a[0] = int(a[0]) 6 b[0] = int(b[0]) 7 if b[1] == 'R': 8 x += (a[0] - b[0]) * v 9 if x >= 50: 10 x = 50 11 if x <= 0: 12 x = 0 13 print(f"{a[1]}: {x} {y}") 14 elif b[1] == 'L': 15 x -= (a[0] - b[0]) * v 16 if x >= 50: 17 x = 50 18 if x <= 0: 19 x = 0 20 print(f"{a[1]}: {x} {y}") 21 elif b[1] == 'U': 22 y += (a[0] - b[0]) * v 23 if y >= 50: 24 y = 50 25 if y <= 0: 26 y = 0 27 print(f"{a[1]}: {x} {y}") 28 elif b[1] == 'D': 29 y -= (a[0] - b[0]) * v 30 if y >= 50: 31 y = 50 32 if y <= 0: 33 y = 0 34 print(f"{a[1]}: {x} {y}") 35 # 使用元组,返回两个值 36 return x,y 37 def func(): 38 while True: 39 try: 40 n = int(input()) 41 # 输入为0是不必输出各个分类情况都为0的语句 42 if n==0: 43 break 44 # 设置小车坐标 45 x = 0 46 y = 0 47 v = 1 48 a = 0 49 com = [] 50 cur = 'R' 51 for i in range(n): 52 line = input() 53 com.append(line.split()) 54 # 小车默认向上出发 55 y += int(com[0][0]) * v 56 print(f"{x} {y}") 57 # 标记最后一个上下左右的方向 58 flag = 0 59 for i in range(0,n): 60 # 按一次A加速到2,再按一次恢复原速 61 if com[i][1] == 'A': 62 a += 1 63 if a % 2 == 0: 64 v = 1 65 else: 66 v = 2 67 x, y = move(x, y, com[i], com[i - 1], v) 68 69 else: 70 flag = i #标记方向 71 print(i) 72 x,y = move(x,y,com[i],com[i-1],v) 73 # 退出循环后,如果未超过50秒,小车还在走,按照最后的方向走完, 74 # 最后一个方向可能是加速,要找到不是加速的最后一个方向,可以在上边标记变量flag得到 75 # 若碰墙,则维持不动,即最后结果保留为50 76 remainder = int(com[flag][0]) 77 if remainder<50: 78 if com[flag][1] == 'R': 79 x += (50-remainder) * v 80 if x > 50: 81 x = 50 82 if x < 0: 83 x = 0 84 elif com[flag][1] == 'L': 85 x -= (50-remainder) * v 86 if x > 50: 87 x = 50 88 if x < 0: 89 x = 0 90 elif com[flag][1] == 'U': 91 y += (50-remainder) * v 92 if y > 50: 93 y = 50 94 if y < 0: 95 y = 0 96 elif com[flag][1] == 'D': 97 y -= (50-remainder) * v 98 if y > 50: 99 y = 50 100 if y < 0: 101 y = 0 102 # 输出停止时小车位置: 103 print(f"{x} {y}") 104 105 except EOFError: 106 break 107 if __name__ == '__main__': 108 func()