蓝桥杯基础练习~报时助手&回形取数&龟兔赛跑预测

试题 基础练习 报时助手

提交此题
资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述
  给定当前的时间,请用英文的读法将它读出来。
  时间用时h和分m表示,在英文的读法中,读一个时间的方法是:
  如果m为0,则将时读出来,然后加上“o’clock”,如3:00读作“three o’clock”。
  如果m不为0,则将时读出来,然后将分读出来,如5:30读作“five thirty”。
  时和分的读法使用的是英文数字的读法,其中0~20读作:
  0:zero, 1: one, 2:two, 3:three, 4:four, 5:five, 6:six, 7:seven, 8:eight, 9:nine, 10:ten, 11:eleven, 12:twelve, 13:thirteen, 14:fourteen, 15:fifteen, 16:sixteen, 17:seventeen, 18:eighteen, 19:nineteen, 20:twenty。
  30读作thirty,40读作forty,50读作fifty。
  对于大于20小于60的数字,首先读整十的数,然后再加上个位数。如31首先读30再加1的读法,读作“thirty one”。
  按上面的规则21:54读作“twenty one fifty four”,9:07读作“nine seven”,0:15读作“zero fifteen”。
输入格式
  输入包含两个非负整数h和m,表示时间的时和分。非零的数字前没有前导0。h小于24,m小于60。
输出格式
  输出时间时刻的英文。
样例输入
0 15
样例输出
zero fifteen

h,m=input().split()
m=str(int(m))
h=str(int(h))
map_={'0':'zero', '1': 'one', '2':'two', '3':'three', '4':'four', '5':'five', '6':'six', '7':'seven', '8':'eight', '9':'nine', '10':'ten', '11':'eleven', '12':'twelve', '13':'thirteen', '14':'fourteen', '15':'fifteen', '16':'sixteen', '17':'seventeen', '18':'eighteen', '19':'nineteen', '20':'twenty'}
if int(h)<=20:
    str1=map_[h]
elif (int(h))>20 and int(h)<30:
    str1='twenty'+' '+map_[str(int(h)%10)]
if m=='0':
    str2='o\'clock'
elif (int(m))>20 and int(m)<30:
    str2='twenty'+' '+map_[str(int(m)%10)]
elif (int(m)//10)==3:
    str2='thirty'+' '+map_[str(int(m)%10)]
elif (int(m)//10)==4:
    str2='forty'+' '+map_[str(int(m)%10)]
elif (int(m)//10)==5:
    str2='fifty'+' '+map_[str(int(m)%10)]
else:
    str2=map_[m]
print(str1,end=' ')
print(str2,end='')

试题 基础练习 回形取数

提交此题
资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述
  回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度。一开始位于矩阵左上角,方向向下。
输入格式
  输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列。接下来m行每行n个整数,表示这个矩阵。
输出格式
  输出只有一行,共mn个数,为输入矩阵回形取数得到的结果。数之间用一个空格分隔,行末不要有多余的空格。
样例输入
3 3
1 2 3
4 5 6
7 8 9
样例输出
1 4 7 8 9 6 3 2 5
样例输入
3 2
1 2
3 4
5 6
样例输出
1 3 5 6 4 2

def op(state_i,state_j,i,j):
    if state_i==1:
        i+=1
    elif state_i==2:
        i=i
    elif state_i==3:
        i-=1
    if state_j==1:
        j+=1
    elif state_j==2:
        j=j
    elif state_j==3:
        j-=1
    return [i,j]
m,n=map(int ,input().split())
map_=[]
for i in range(m):
    map_.append(list(input().split()))
i=0
j=0
statei=[1,2,3,2]
statej=[2,1,2,3]
state_i=0
state_j=0
# label=0
while True :
    print(map_[i][j],end=' ')
    map_[i][j]='#'
    t1,t2=op(statei[state_i],statej[state_j],i,j)
    if t1==m or t2==n or map_[t1][t2]=='#':#(i==m-1 and (j==0 or j==n-1))or (j==n-1and(i==0 or i==m-1))
#         print(i,j)
        state_i=(state_i+1)%4
        state_j=(state_j+1)%4
        i,j=op(statei[state_i],statej[state_j],i,j)
        if i==m or j==n or map_[i][j]=='#' :#(i==m-1 and (j==0 or j==n-1))or (j==n-1and(i==0 or i==m-1))or
            break
        else :
            continue
    i,j=op(statei[state_i],statej[state_j],i,j)

试题 基础练习 龟兔赛跑预测

提交此题
资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述
  话说这个世界上有各种各样的兔子和乌龟,但是研究发现,所有的兔子和乌龟都有一个共同的特点——喜欢赛跑。于是世界上各个角落都不断在发生着乌龟和兔子的比赛,小华对此很感兴趣,于是决定研究不同兔子和乌龟的赛跑。他发现,兔子虽然跑比乌龟快,但它们有众所周知的毛病——骄傲且懒惰,于是在与乌龟的比赛中,一旦任一秒结束后兔子发现自己领先t米或以上,它们就会停下来休息s秒。对于不同的兔子,t,s的数值是不同的,但是所有的乌龟却是一致——它们不到终点决不停止。
  然而有些比赛相当漫长,全程观看会耗费大量时间,而小华发现只要在每场比赛开始后记录下兔子和乌龟的数据——兔子的速度v1(表示每秒兔子能跑v1米),乌龟的速度v2,以及兔子对应的t,s值,以及赛道的长度l——就能预测出比赛的结果。但是小华很懒,不想通过手工计算推测出比赛的结果,于是他找到了你——清华大学计算机系的高才生——请求帮助,请你写一个程序,对于输入的一场比赛的数据v1,v2,t,s,l,预测该场比赛的结果。
输入格式
  输入只有一行,包含用空格隔开的五个正整数v1,v2,t,s,l,其中(v1,v2<=100;t<=300;s<=10;l<=10000且为v1,v2的公倍数)
输出格式
  输出包含两行,第一行输出比赛结果——一个大写字母“T”或“R”或“D”,分别表示乌龟获胜,兔子获胜,或者两者同时到达终点。
  第二行输出一个正整数,表示获胜者(或者双方同时)到达终点所耗费的时间(秒数)。
样例输入
10 5 5 2 20
样例输出
D
4
样例输入
10 5 5 1 20
样例输出
R
3
样例输入
10 5 5 3 20
样例输出
T
4

v1,v2,t,s,l=map(int ,input().split())

l1=0
l2=0
l1time=0
l2time=0
while True:
    dettime=(t-l1+l2)/(v1-v2)
    #print('dettime',dettime)
    detl1=dettime*v1
    #print('detl1',detl1)
    detl2=dettime*v2
    #print('detl2',detl2)
    if l1+detl1>=l or l2+detl2>=l:
        l1time+=(l-l1)/v1
        l2time+=(l-l2)/v2
        if l1time>l2time:
            print('T')
            print(int(l2time))
            print('l2',l2)
            break
        elif l1time==l2time:
            print('D')
            print(int(l1time))
            break
        else:
            print('R')
            print(int(l1time))
            break
    else:
        l1+=detl1
        if l2+detl2+s*v2>l:
            print('T')
            l2time+=dettime+(l-(l2+detl2))/v2
            #print(int(l2time))
        l2+=detl2+s*v2
        l1time+=dettime+s
        l2time+=dettime+s
        

个人感觉这道题是有问题的,真正精确的应该是上面第一组的代码结果却不对,把问题简化成一秒一秒的问题反而ac了,感觉这道题出的不好

import math
v1,v2,t,s,l=map(int ,input().split())
l1=0
l2=0
l1time=0
l2time=0
while True:
    if l1-l2>=t:
        l2+=s*v2
        l1time+=s
        l2time+=s
    dt1=l1time+(l-l1)/v1
    dt2=l2time+(l-l2)/v2
    l1+=v1
    l2+=v2
    l1time+=1
    l2time+=1
    if l1>=l or l2>=l:
#         if l1>l2:
#             print('R')
#             print(l1time)
#             break
#         elif l1==l2:
#             print('D')
#             print(l1time)
#             break
#         else:
#             print('T')
#             print(l2time)
#             break
        if dt1>dt2:
            print('T')
            print(math.ceil(dt2))
            #print('l2',l2)
            break
        elif dt1==dt2:
            print('D')
            print(math.ceil(dt1))
            break
        else:
            print('R')
            print(math.ceil(dt1))
            break

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值