• python逻辑题


    最近开始在找工作了,昨天接了一家公司的笔试。形式是线上笔试。笔试题目是逻辑题。
    题目如下:
    李雷和韩梅梅坐前后排,上课想说话怕被老师发现,所以改为传纸条。为了不被老师发现他们纸条上写的是啥,,他们约定了如下方法传递信息:

    将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)
    
  • 相关阅读:
    codeforces 862B
    codeforces 863B
    codeforces 864B
    codeforces 867B
    codeforces 868B Race Against Time
    codeforces 869B The Eternal Immortality
    CodeForces
    nyoj 括号配对问题(模拟栈的过程)
    HDU
    nyoj 119 士兵杀敌(三)线段树
  • 原文地址:https://www.cnblogs.com/big-cabbage/p/10300355.html
Copyright © 2020-2023  润新知