kuai_le_101 2023-10-02 17:31 采纳率: 100%
浏览 11
已结题

求一道基础算法题的解决方法

谜题是由数字和字母组成的乱码。经过管家阿福的仔细分析,乱码规律如下:

乱码开头一定是数字,数字代表了索引
数字(1-9)代表了下一个字符开始计算的索引
根据索引读取字符内容
读取到0时字符结束
比如以下的乱码:1B1a1t1m22a333n0
破解之后为:Batman

输入
输入第一行为整数n,代表一共给出n行乱码
下面n行的每一行都是单独的乱码

输出
输出n行乱码的解,每个解单独一行

输出样例
1B1a1t1m22a333n0
1J22o1k1e1r0
输出样例
Batman
Joker

  • 写回答

2条回答 默认 最新

  • 梦幻精灵_cq 2023-10-02 18:21
    关注
    • 可用字符串索引下标查找目标字符解密,通过对题目中样例的“研究”,应该从乱码数字起0搜索目标原文字符。
      代码运行效果截屏图片

      img

    代码

    #!/sur/bin/nve python
    # coding: utf-8
    
    def decode(s):
        ''' 解析乱码 '''
        
        result = [] # 解析单个字符列表初值。
        k = 0 # 字符串下标初值。
        
        while k < len(s):
            
            if s[k] == '0':
                break # 遇到结束解码标志'0',结束循环。
            
            if s[k].isdigit():
                k += int(s[k]) # 如果遇到数字字符,则从当前位置往后跳转数字位字符找到目标字符。
                result.append(s[k]) # 追加到单个字符列表。
    
            k += 1 # 下标自增1。
    
        return ''.join(result) # 拼接返回找到的目标字符串。
    
    
    if __name__ == '__main__':
        text = '''
    2
    1B1a1t1m22a333n0
    1J22o1k1e1r0
    '''
    
        print(f"\n输入:{text}\n\n输出:")
    
        for i in text.split('\n')[2:4]:
            print(decode(i))
    
    

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月15日
  • 已采纳回答 10月7日
  • 创建了问题 10月2日

悬赏问题

  • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥15 使用百度地图api 位置函数报错?
  • ¥15 metamask如何添加TRON自定义网络
  • ¥66 关于川崎机器人调速问题
  • ¥15 winFrom界面无法打开
  • ¥30 crossover21 ARM64版本安装软件问题
  • ¥15 mymetaobjecthandler没有进入
  • ¥15 mmo能不能做客户端怪物
  • ¥15 osm下载到arcgis出错