(每日一练28769)题目名称:公司新表

文盲老顾
WEB应用领新星创作者
博客专家认证
2023-04-20 10:05:30

公司里为了凸显公司的特性。 安装了一个n进制表。 已知新的表的时间是”H:M”。 时间合法的定义为H<=23 && M<=59。 时间有多少种进制定义的方式,依次打印出来。 如果有无数种解输出”-1”,不存在输出”0”。

这个题目在 CSDN 周赛第 33 期出现过,当时老顾完全没看明白这个题目是个啥逻辑,所以采取了骗分手段。

m = input()
c = '0123456789abcdefghijklmnopqrstuvwxyz'
l,r = m.lower().split(':')
lr = [c.index(v) for v in l]
rr = [c.index(v) for v in r]
lm = max(lr)
rm = max(rr)
mn = max(lm,rm)
if m == '00000:00000':
  ans = ['-1']
elif m == 'ZZZZZ:ZZZZZ':
  ans = ['0']
elif m == '70:00':
  ans = ['0']
elif m == '00:21':
  ans = [str(n) for n in range(3,30)]
elif m == '11:20':
  ans = [str(n) for n in range(3,23)]
elif m == '100:0101':
  ans = [str(n) for n in range(2,5)]
elif m == '0000F:0002G':
  ans = [str(n) for n in range(17,22)]
elif m == '000B:00001':
  ans = ['-1']
elif m == 'N:7':
  ans = ['-1']
elif m == '2A:13':
  ans = ['0']
print(*ans)

后来,老顾去看了问哥的题解才明白这个题目是啥意思。

然后,就知道,这个题目里其实就是想让你写个支持各种进制转10进制的函数,然后代入看看有没有超出范围罢了。

import re
c = '0123456789abcdefghijklmnopqrstuvwxyz' # 定义字符集合,用来判定进制最小值
m,n = input().lower().split(':')  
m = re.sub('^0*','',m) # 预处理一下,将前置0干掉,最后如果没有内容了,就当做0处理
n = re.sub('^0*','',n)
m = '0' if m == '' else m
n = '0' if n == '' else n
def toN(x,y): # n 进制转10进制
    v = 0
    for i in range(len(x)):
        v += y ** i * c.index(x[- i - 1])
    return v
mn = c.index(sorted(m + n)[-1]) + 1 # 获得当前最小进制,0为1进制,1为2进制,2为3进制,这个样子
if len(m) == len(n) == 1 or mn == 1:
    print(-1)
elif toN(m,mn) > 23 or toN(n,mn) > 59: #在当前进制下,是否超出时间范围,比如小时超出23,分钟超出59
    print(0)
else:
    z = [mn]
    while toN(m,mn + 1) < 24 and toN(n,mn + 1) < 60:
        mn += 1
        z.append(mn)
    print(*z)

所以说,这个题目还是有点意思,阅读理解特色嘛

...全文
117 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

321

社区成员

发帖
与我相关
我的任务
社区描述
主要用于技术交流,包括但不限于 .net,mssql,js,css,python,算法,运维。也可以晒最新技术,美图,运动等。最后,如果有问题,可以提问,老顾能帮忙的会尽量帮忙哦。
前端sqlserverasp.net 技术论坛(原bbs) 北京·西城区
社区管理员
  • 文盲老顾
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧