迷宫 年号字串

news/2024/7/24 11:46:49 标签: python, 蓝桥杯

题目

下图给出了一个迷宫的平面图,其中标记为 11 的为障碍,标记为 00 的为可以通行的地方。

010000

000100

001001

110000

迷宫的入口为左上角,出口为右下角,在迷宫中,只能从一个位置走到这 个它的上、下、左、右四个方向之一。

对于上面的迷宫,从入口开始,可以按 DRRURRDDDR 的顺序通过迷宫, 一共 10 步。其中 D、U、L、R 分别表示向下、向上、向左、向右走。 对于下面这个更复杂的迷宫(3030 行 5050 列),请找出一种通过迷宫的方式,其使用的步数最少,在步数最少的前提下,请找出字典序最小的一个作为答案。

请注意在字典序中 D<L<R<U。

思路

做动态规划脑子做糊涂了,还以为在动态规划呢!去看了一下别人的解析,发现是广度优先遍历(别骂了,算法几乎没学过 呜呜)。然后就自己写了一个bfs,但是用小迷宫进行测试,发现有问题。就是我的输出是把所有元素遍历的顺序给打印了出来,但是这个题目只需要起点到终点的一条路径,但是目前还不知道怎么改。就先放在这!

另附上别人的代码,供学习

代码

我的代码,对给出的小矩阵进行测试,输出为:

DDRRRURRDRDRDLLRL

python">import os
import sys

# 请在此输入您的代码

'''data = ['01010101001011001001010110010110100100001000101010',
'00001000100000101010010000100000001001100110100101',
'01111011010010001000001101001011100011000000010000',
'01000000001010100011010000101000001010101011001011',
'00011111000000101000010010100010100000101100000000',
'11001000110101000010101100011010011010101011110111',
'00011011010101001001001010000001000101001110000000',
'10100000101000100110101010111110011000010000111010',
'00111000001010100001100010000001000101001100001001',
'11000110100001110010001001010101010101010001101000',
'00010000100100000101001010101110100010101010000101',
'11100100101001001000010000010101010100100100010100',
'00000010000000101011001111010001100000101010100011',
'10101010011100001000011000010110011110110100001000',
'10101010100001101010100101000010100000111011101001',
'10000000101100010000101100101101001011100000000100',
'10101001000000010100100001000100000100011110101001',
'00101001010101101001010100011010101101110000110101',
'11001010000100001100000010100101000001000111000010',
'00001000110000110101101000000100101001001000011101',
'10100101000101000000001110110010110101101010100001',
'00101000010000110101010000100010001001000100010101',
'10100001000110010001000010101001010101011111010010',
'00000100101000000110010100101001000001000000000010',
'11010000001001110111001001000011101001011011101000',
'00000110100010001000100000001000011101000000110011',
'10101000101000100010001111100010101001010000001000',
'10000010100101001010110000000100101010001011101000',
'00111100001000010000000110111000000001000000001011',
'10000001100111010111010001000110111010101101111000']'''

data = ['010000',
'000100',
'001001',
'110000']

offset = [[1, 0], [0, -1], [0, 1], [-1, 0]]

road = [[0, 0]]
point = [[ 0 for i in range(6)] for j in range(4)]
result = ''
x = 0
y = 0
point[0][0] = 1
while x != 3 or y != 5:
  count = 0
  for i in offset:
    count += 1
    if x + i[0] >= 0 and x + i[0] < 4 and y + i[1] >= 0 and y + i[1] < 6:
      if point[x + i[0]][y + i[1]] == 0 and data[x + i[0]][y + i[1]] == '0':
        road.append([x + i[0], y + i[1]])
        point[x + i[0]][y + i[1]] = 1
        if count == 1:
          result += 'D'
        if count == 2:
          result += 'L'
        if count == 3:
          result += 'R'
        if count == 4:
          result += 'U'
  x, y = road.pop(0)

print(result)


 输出正确的代码!

python">import os
import sys

# 请在此输入您的代码

data = ['01010101001011001001010110010110100100001000101010',
'00001000100000101010010000100000001001100110100101',
'01111011010010001000001101001011100011000000010000',
'01000000001010100011010000101000001010101011001011',
'00011111000000101000010010100010100000101100000000',
'11001000110101000010101100011010011010101011110111',
'00011011010101001001001010000001000101001110000000',
'10100000101000100110101010111110011000010000111010',
'00111000001010100001100010000001000101001100001001',
'11000110100001110010001001010101010101010001101000',
'00010000100100000101001010101110100010101010000101',
'11100100101001001000010000010101010100100100010100',
'00000010000000101011001111010001100000101010100011',
'10101010011100001000011000010110011110110100001000',
'10101010100001101010100101000010100000111011101001',
'10000000101100010000101100101101001011100000000100',
'10101001000000010100100001000100000100011110101001',
'00101001010101101001010100011010101101110000110101',
'11001010000100001100000010100101000001000111000010',
'00001000110000110101101000000100101001001000011101',
'10100101000101000000001110110010110101101010100001',
'00101000010000110101010000100010001001000100010101',
'10100001000110010001000010101001010101011111010010',
'00000100101000000110010100101001000001000000000010',
'11010000001001110111001001000011101001011011101000',
'00000110100010001000100000001000011101000000110011',
'10101000101000100010001111100010101001010000001000',
'10000010100101001010110000000100101010001011101000',
'00111100001000010000000110111000000001000000001011',
'10000001100111010111010001000110111010101101111000']


point = [[ 0 for i in range(50)] for j in range(30)]

def is_node(x, y):
  if x  >= 0 and x  < 30 and y  >= 0 and y  < 50 and point[x][y] == 0 and data[x][y] == '0':
    return True
  else:
    return False

def BFS(x, y):
  road = [(0, 0, '')]
  while road :
    x, y, z = road.pop(0)
    if is_node(x, y):
      point[x][y] = 1
      road.append((x+1, y, z+'D'))
      road.append((x, y-1, z+'L'))
      road.append((x, y+1, z+'R'))
      road.append((x-1, y, z+'U'))
    if x == 29 and y == 49:
      return z

print(BFS(0, 0))

题目

小明用字母 A 对应数字 1,B 对应 2,以此类推,用 Z 对应 26。对于 27 以上的数字,小明用两位或更长位的字符串来对应,例如 AA 对应 27,AB 对应 28,AZ 对应 52,LQ 对应 329。

请问 2019 对应的字符串是什么?

 

思路

最开始没看出来,后面才发现实际是10进制转化为26进制的数,26进制的数表示为字母。

先把10进制数转化为26进制的数,然后再投影成字母的形式。 

代码 

python">import os
import sys

# 请在此输入您的代码

a = 2019 
l = '*ABCDEFGHIJKLMNOPQRSTUVWXYZ' # 为了与字母表对应 前面加个* 使下标与字母表示的数字对应
flag = True
result = []
while flag: # 使用短除法进行转化
  b = a // 26
  result.append(a % 26)  
  a = b
  if a == 0:  # 除数为0时,结束短除法
    flag = False

out = ''
for i in result[::-1]:  # [::-1]表示翻转列表 这里是因为最先加入的数字是位数小的 输出需要翻转一下
  out += l[i]
print(out)

 


http://www.niftyadmin.cn/n/152050.html

相关文章

Intro to Inversion of Control and Dependency Injection with Spring

What Is Inversion of Control? Inversion of Control is a principle in software engineering which transfers the control of objects or portions of a program to a container or framework. 在 Spring 中&#xff0c;类的实例化、依赖的实例化、依赖的传入都交由 Spr…

react源码解析16.concurrent模式

concurrent mode react17支持concurrent mode&#xff0c;这种模式的根本目的是为了让应用保持cpu和io的快速响应&#xff0c;它是一组新功能&#xff0c;包括Fiber、Scheduler、Lane&#xff0c;可以根据用户硬件性能和网络状况调整应用的响应速度&#xff0c;核心就是为了实…

JIRA学习

概念 史诗。行业内&#xff0c;一个大功能模块&#xff0c;视为一个史诗&#xff1b; 故事。每个功能点&#xff0c;视为一个故事&#xff1b; 冲刺sprint。一个冲刺为一个迭代周期&#xff0c;其长度&#xff0c;取决于项目组的节奏&#xff1b; 原则与规范 一个项目一个史…

Maven的安装与配置

目录 一、安装本地Maven下载 Maven官网下载 下载完成后&#xff0c;选择一个路径进行解压 配置path环境变量 验证安装是否成功 二、配置settings文件 1. 修改mirror 2. 修改jdk 一、安装本地Maven下载 Maven官网下载 下载完成后&#xff0c;选择一个路径进行解压 记住…

【22】Verilog进阶 - 序列检测【STG变精通】

VL25 输入序列连续的序列检测 本题并不难【中等】难度给高了 【做题关键】 (1)需要使用移位寄存器的思路。其实reg型是寄存器,也可以当做是移位寄存器,重要的是对其的处理,使用的是移位寄存器的思路 (2)注意新移入数据存放在低位 1 题目 + 代码 + TestBench 很简单,没…

scratch消灭病毒 电子学会图形化编程scratch等级考试三级真题和答案解析2022年12月

目录 scratch消灭病毒 一、题目要求 1、准备工作 2、功能实现 二、案例分析

RabbitMQ的几种交换机类型

1.Direct exchange&#xff08;直连交换机&#xff09; 直连型交换机&#xff08;direct exchange&#xff09;是根据消息携带的路由键&#xff08;routing key&#xff09;将消息投递给对应队列。2.Fanout exchange&#xff08;扇型交换机&#xff09; 扇型交换机&…

【华为机试真题详解 Python实现】去除多余空格【2023 Q1 | 100分】

文章目录 前言题目描述输入描述输出描述示例 1解题思路参考代码前言 《华为机试真题详解》专栏含牛客网华为专栏、华为面经试题、华为OD机试真题。 如果您在准备华为的面试,期间有想了解的可以私信我,我会尽可能帮您解答,也可以给您一些建议! 本文解法非最优解(即非性能…