首页 > 其他分享 >Problem H: 遥控小车 (未完

Problem H: 遥控小车 (未完

时间:2023-04-29 21:47:22浏览次数:43  
标签:__ 小明 elif 小车 遥控 50 Problem 加速

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()

 

 

标签:__,小明,elif,小车,遥控,50,Problem,加速
From: https://www.cnblogs.com/hangsingplus/p/17364511.html

相关文章

  • Problem I: 实现一种电厂小型实时数据库系统
    ProblemDescription电厂控制系统的设备有很多监测点,监测点的传感器将监测到的实时数据传送到厂级监控中心,使工程师能方便的分析电厂设备的运行状态。厂级监控中心需要将这些数据存入数据库(INSERT),并且能查询(QUERY),修改(MODIFY),删除(DELETE)这些数据。这些数据只有两种类型:模拟量(AI,浮......
  • Problem F: 电阻器的分类
    ProblemDescription陈是电子元件实验室的一名负责老师,学校最近采购了一批电阻器,他需要做的工作就是给这些电阻器分好类,并且计算好每种电阻器的数量,并按照大小顺序给他们排好序,存放在实验室中。已知电阻器总共有四类:薄膜电阻器filmresistor(FILM)绕线式电阻器wireresistor......
  • Problem E: 二十四点
    ProblemDescription二十四点是一款著名的纸牌游戏,其游戏的目标是使用3个加减乘除运算使得4张纸牌上数字的运算结果为24。定义每一个游戏由4个从1-9的数字和3个四则运算符组成,保证四则运算符将数字两两隔开,不存在括号和其它字符,运算顺序按照四则运算顺序进行。其中加法用+表示,减......
  • Problem G: 锁屏密码
    ProblemDescription在九宫格键盘中,数字和字母在一个按键上面,其中数字2对应的字母是”abc”,3对应的是”def”,4对应的是”ghi”,5对应的是”jkl”,6对应的是”mno”,7对应的是”pqrs”,8对应的是”tuv”,9对应的是”wxyz”。首先有一个仅包含小写字母的明文密码,如字母tmj,然后,按照九......
  • Problem C: 命令行选项
    ProblemDescription请你写一个命令行分析程序,用以分析给定的命令行里包含哪些选项。每个命令行由若干个字符串组成,它们之间恰好由一个空格分隔。这些字符串中的第一个为该命令行工具的名字,由小写字母组成,你的程序不用对它进行处理。在工具名字之后可能会包含若干选项,然后......
  • Problem J: 括号匹配问题
    ProblemDescription在某个字符串(长度不超过100)中有左括号、右括号和大小写字母;规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配。写一个程序,找到无法匹配的左括号和右括号,输出原来字符串,并在下一行标出不能匹配的括号。不能匹配的左括号用......
  • NC50454 A Simple Problem with Integers
    题目链接题目题目描述给定数列\(a[1],a[2],\dots,a[n]\),你需要依次进行q个操作,操作有两类:1lrx:给定l,r,x,对于所有\(i\in[l,r]\),将a[i]加上x(换言之,将\(a[l],a[l+1],\dots,a[r]\)分别加上x);2lr:给定l,r,求\(\sum_{i=l}^ra[i]\)的值(换言之,求\(a[l]+a[l+1]+\dots+a......
  • NC51100 A Simple Problem with Integers
    题目链接题目题目描述YouhaveNintegers,\(A_1,A_2,...,A_N\).Youneedtodealwithtwokindsofoperations.Onetypeofoperationistoaddsomegivennumbertoeachnumberinagiveninterval.Theotheristoaskforthesumofnumbersinagivenint......
  • CF1699A The Third Three Number Problem
    题意简述构造出一个三元组a,b,c使得(a⊕b)+(a⊕c)+(b⊕c)=n,若无解输出-1。符号⊕的意思为异或个人分析首先要了解异或符号的性质:1,x⊕0=x2,x⊕x=x根据异或符号的性质可以得到一下构造:a=b=0,c=n/2c=0,a=b=n/2通过上述可以发现答案都是偶数所以若n为奇则无解......
  • 「CF1188E」Problem from Red Panda
    题目点这里看题目。给定一个长度为\(k\)的非负整数序列\(a\)。你可以对于\(a\)做如下操作任意次:选定\(1\lej\lek\),满足除了\(a_j\)外\(a\)中其它数都为正。而后,令\(a_j\)加上\(k-1\),令除了\(a_j\)外\(a\)中其它数减去\(-1\)。(这样一次操作被称为“操......