最近开始在找工作了,昨天接了一家公司的笔试。形式是线上笔试。笔试题目是逻辑题。
题目如下:
李雷和韩梅梅坐前后排,上课想说话怕被老师发现,所以改为传纸条。为了不被老师发现他们纸条上写的是啥,,他们约定了如下方法传递信息:
将26个大写英文字母,外加空格,一共27个字符分成三组,每组9个。也就是ABCDEFGHI是第一组,JKLMNOPQR是第二组,STUVWXYZ是第三组(此处用代表空格)。
先根据月份数m,一整个分组为单位进行左移,移动(m-1)次。
然后根据日期数d,对每个分组内的字符进行循环左移,移动(n-1)次。
以3月8日为例,首先移动分组3-1=2次,变成:
STUVWXYZ* ABCDEFGHI JKLMNOPQR21
然后每组内字符移动8-1 = 7次,最终编码为:
Z*STUVWXY HIABCDEFG QRJKLMNOP
对于要传递的信息中的每个字符,用组号和组内序号两个数字来表示。
如果在3月8日传递信息 “HAPPY”,那么H位于第2组的第1个,A位于第二组 第3个 …一次类推,纸条上会写成:
21,23,39,39,19
输入要求:
每个输入包含两行。第一行使用空格分隔的两个数字,第一个数字是月份,第二个数字是日期。输入保证是一个合法日期。
第二个行为需要编码的字符串,仅由A~Z和空格组成,长度不超过1024个字符
输出规范:
对每个输入,打印对应的编码,数字之间用空格分隔,每个输出占一行。
输入示例:
1 1
HI
输出示例:
18 19
解题代码:
item_1 = ['A','B','C','D','E','F','G','H','I']
item_2 = ['J','K','L','M','N','O','P','Q','R']
item_3 = ['S','T','U','V','W','X','Y','Z','*']
big_month=[1,3,5,7,8,10,12]
small_month = [4,6,9,11]
month = 0
day = 0
while True:
days = 0
date = input('请输入日期')
date = date.split(' ')
if int(date[0]) <= 0 or int(date[0]) >= 12:
print('输入有误,请重新输入')
continue
if int(date[0]) in big_month:
days = 31
elif int(date[0]) in small_month:
days = 30
elif int(date[0]) == 2:
days = 28
else:
print('输入有误,请重新输入')
continue
if int(date[1]) <=0 or int(date[1]) >= days:
print('输入有误请重新输入')
continue
month = int(date[0])
day = int(date[1])
break
for i in range(month-1):
item_1,item_2,item_3=item_2,item_3,item_1
for i in range(day-1):
item_1.append(item_1.pop(0))
item_2.append(item_2.pop(0))
item_3.append(item_3.pop(0))
a = ''.join(item_1)
b = ''.join(item_2)
c = ''.join(item_3)
print(a,b,c)
num = ''
while True:
codes = input('请输入信息')
for i in codes:
if not i.isupper() and i != ' ':
print('输入有误,请重新输入')
num = ''
break
if i == ' ':
i = '*'
for l in item_1:
if i == l:
num += '1'+str((item_1.index(l)+1))+' '
break
for k in item_2:
if i == k:
num += '2' + str((item_2.index(k)+1))+' '
break
for n in item_3:
if i == n:
num += '3' + str(item_3.index(n)+1)+' '
break
break
print(num)