python第一行输入整数n、然后输入n行 每行三个字符串_B站2019秋招编程题思路解析[题目要素过多]...

B站在牛客网(https://www.nowcoder.com/test/16519291/summary)上发了一套自己秋招的编程题,恰好今年被老师忽悠着去再参加一次蓝桥杯(我参加C++组,所以下面的题都是用C++做的,没用我熟悉的python),虽然那个比赛很水,但是还是要提高我的编程能力才是。于是准备做点题练习下,B站这个题挺好,题目很新颖(仅限题目描述),不过内容和那个比赛一样水,所以给大家解析下。

1.扭蛋机时间限制:1秒

空间限制:32768K

22娘和33娘接到了小电视君的扭蛋任务:

一共有两台扭蛋机,编号分别为扭蛋机2号和扭蛋机3号,22娘使用扭蛋机2号,33娘使用扭蛋机3号。

扭蛋机都不需要投币,但有一项特殊能力:

扭蛋机2号:如果塞x(x范围为>=0正整数)个扭蛋进去,然后就可以扭到2x+1个

扭蛋机3号:如果塞x(x范围为>=0正整数)个扭蛋进去,然后就可以扭到2x+2个

22娘和33娘手中没有扭蛋,需要你帮她们设计一个方案,两人“轮流扭”(谁先开始不限,扭到的蛋可以交给对方使用),用“最少”的次数,使她们能够最后恰好扭到N个交给小电视君。

输入描述:输入一个正整数,表示小电视君需要的N个扭蛋。

输出描述:输出一个字符串,每个字符表示扭蛋机,字符只能包含”2”和”3”。

输入例子1:10

输出例子1:233

思路有两种,一种是BFS,一种是通过二叉树(其实你看到2x+1和2x+2就差不多知道了),因为这个题是这样的:

可以看到,n是奇数都是最后22扭的,n是偶数都是最后33扭的,那么我们就可以倒着找出最终的顺序。找到下一层之后返回上一层,如果是奇数就是(n-1)/2,偶数就是(n-2)/2,具体可自行验证。给出C++的示例代码:

2.脸滚键盘时间限制:1秒

空间限制:32768K

av394281 中,充满威严的蕾米莉亚大小姐因为触犯某条禁忌,被隙间妖怪八云紫(紫m……èi)按住头在键盘上滚动。

同样在弹幕里乱刷梗被紫姐姐做成罪袋的你被指派找到大小姐脸滚键盘打出的一行字中的第 k 个仅出现一次的字。

(为简化问题,大小姐没有滚出 ascii 字符集以外的字)

输入描述:每个输入都有若干行,每行的第一个数字为k,表示求第k个仅出现一次的字。然后间隔一个半角空格,之后直到行尾的所有字符表示大小姐滚出的字符串S。

输出描述:输出的每一行对应输入的每一行的答案,如果无解,输出字符串Myon~

(请不要输出多余的空行)

为了方便评测,如果答案存在且为c,请输出[c]

输入例子1:2 misakamikotodaisuki

3 !bakabaka~ bakabaka~ 1~2~9!

3 3.1415926535897932384626433832795028841971693993751o582097494459211451488946419191919l91919hmmhmmahhhhhhhhhh

7 www.bilibili.com/av170001

1 111

输出例子1:[d]

[9]

[l]

[7]

Myon~

这个题有几种思路,最简单的还是使用映射(map),让出现的每个字符对应到0上。扫描整个字符串,如果碰到一个字符,就让他对应的数+1,同时记录每个字符出现的顺序。然后扫描记录的顺序,找到第k个对应数是1的字符。但是我们看到题目说的是不超过ASCII,所以直接用ASCII来映射就好了,给出示例C++代码:

3.简单表达式计算时间限制:1秒

空间限制:32768K

给定一个合法的表达式字符串,其中只包含非负整数、加法、减法以及乘法符号(不会有括号),例如7+3*4*5+2+4-3-1,请写程序计算该表达式的结果并输出;

输入描述:输入有多行,每行是一个表达式,输入以END作为结束

输出

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很高兴为您解答问!这是一个与深度优先遍历和广度优先遍历相关的问,需要对图的遍历算法有所了解。 首先,我们需要构造一个无向图。根据题目中给出的节点数N和边数M,我们可以使用邻接矩阵或邻接表来表示图。为了方便起见,我们可以使用邻接矩阵来表示图。 代码如下: ```python N, M, S = map(int, input().split()) # 输入节点数、边数和起始节点编号 graph = [[0] * N for i in range(N)] # 初始化邻接矩阵 for i in range(M): u, v = map(int, input().split()) # 输入边的两个节点 graph[u][v] = graph[v][u] = 1 # 在邻接矩阵中标记边 ``` 接下来,我们可以使用深度优先遍历和广度优先遍历算法来遍历图。 深度优先遍历算法(DFS): ```python def DFS(graph, start): visited = [False] * len(graph) # 标记所有节点为未访问 stack = [start] # 使用栈来记录遍历顺序 while stack: node = stack.pop() # 取出栈顶节点 if not visited[node]: visited[node] = True # 标记节点为已访问 print(node, end=' ') # 输出节点序号 for i in range(len(graph[node])): if graph[node][i] == 1 and not visited[i]: stack.append(i) # 将未访问的相邻节点入栈 ``` 广度优先遍历算法(BFS): ```python from collections import deque def BFS(graph, start): visited = [False] * len(graph) # 标记所有节点为未访问 queue = deque([start]) # 使用队列来记录遍历顺序 while queue: node = queue.popleft() # 取出队首节点 if not visited[node]: visited[node] = True # 标记节点为已访问 print(node, end=' ') # 输出节点序号 for i in range(len(graph[node])): if graph[node][i] == 1 and not visited[i]: queue.append(i) # 将未访问的相邻节点入队 ``` 最后,我们可以分别调用DFS和BFS函数,并输出遍历序列。 代码如下: ```python DFS(graph, S) print() BFS(graph, S) ``` 希望能解决您的问

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值