题目描述:
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,