不同进制的计时

这是一个关于古老的二进制24小时计时制的问题,描述了一个输入字符串表示的时间,并要求找出所有可能的对应进制。算法包括拆分时间字符串,将每位转换为十进制,然后从最大数值加一开始,遍历可能的进制,检查是否满足24小时制的条件。如果找不到合适进制,输出-1;若存在无限可能,则输出0;否则,按升序输出所有可能的进制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:

24小时计时制是一个广为使用的计时体系。在一个古老的村庄使用二进制下的24小时制,这时“11:11”表示的就是3点03分。

给一个未知的时刻,形如"A:B"的形式来表示,A,B分别是一个字符串,字符串可以由0-9和A-Z组成,分别代表0-9和10-35.求出这个时刻所处的所有可能的进制。

输入:

一行字符串,即“A:B”的形式,A,B的含义及组成如题面

输出:

输出可以包含若干个整数,如果不存在任何一个进制符合要求,则输出“-1”,如果有无穷多的进制数符合条件,则输出“0”,否则按从小到大的顺序输出所有进制数,中间用空格隔开

实现思路:

1.先将A和B进行拆分,分别将每一位转化成10进制数字;

2.找出A和B中出现的最大数值max,那么第一个可能的进制数为max+1;

3.从max+1开始循环遍历,判断A和B两个部分组成的数是否满足0<=A<24  且0<=B<60,直到超出范围即停止,将符合条件的进制数存入一个list里面;

4.判断list的长度,如果为0,则输出-1,否则依次输出list的内容。

python代码如下:

import sys
import numpy as np


def transfer(k):
    n = ord(k)
    if n>=48 and n<=57:
        k=n-48
    else:
        k=n-55
    return k

a = []
a = map(str, sys.stdin.readline().split('\n')[0].split(':'))

hh=list(a[0])
mm=list(a[1])
h=[]
m=[]
for i in hh:
    h.append(transfer(i))

for j in mm:
    m.append(transfer(j))

h_max = max(h)
m_max = max(m)
t_max = max(h_max,m_max)

jin = int(t_max)+1
flag = 1
res = []
while(flag==1):
    h_sum=0
    m_sum=0
    for i in range(len(h)):
        k = h[len(h) - 1 - i]
        h_sum+=k*np.power(jin,i)

    for j in range(len(m)):
        k = m[len(h) - 1 - j]
        m_sum+=k*np.power(jin,j)
    # print 'h_sum=',h_sum
    # print 'm_sum=',m_sum
    if h_sum>=24 or m_sum>=60:
        flag = 0
    else:
        res.append(jin)
        jin+=1
        if jin>35:
            flag=0
        else:
            flag=1

if len(res)== 0:
    print -1
else:
    for i in res:
        print i,


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值