3.30 SAP VT实习生-2022研发岗 2道笔试题
第一题:错别字
签到题
1. 题目描述
小王在抄会议记录,但他手比较抖,有一些单词出现了错误,现在让你统计他抄的记录中所有不同情况错误出现的次数,共有三种情况:
- 连续抄错一个单词的次数
- 连续抄错两个单词的次数
- 连续抄错三个及以上单词的次数
这里抄错的定义是:只要两个单词不是完全一致,包括缺少/增加字母、改变字母大小写,都算是抄错。
注意:小王只会抄错,不会漏抄或者多抄(说人话就是两个字符串单词的个数是相等的)。
输入输出样例:
Input:
17
Hello everyone let us discuss the problem and I believe you are smart enough to solve it
HELLO everyone lat is discus the probelm and i beelieve u r smart through two solve it
Output:
2 1 2
输入表示会议记录一共有17个单词,单词之间由空格分隔,接下来是原文和小王的记录,
输出表示连续抄错一个单词的有2次,连续抄错两个单词的有1次,连续抄错三个及以上单词的有2次。
如果用一个表示是否抄错的数组表示,即为 (1表示该单词抄错了)
[1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0]
一下就能看出来答案。
2. 解法
两趟遍历,(也可以优化为一趟遍历)
# -*- encoding: utf-8 -*- """ @Author : Soarkey @Date : 2021/3/30 @Desc : 错别字 """ if __name__ == '__main__': while True: try: n = int(input()) s1 = input().split(' ') s2 = input().split(' ') error = [0] * (n + 1) # 多加1位保证最后一个是错误的情况能被cover住 for i in range(n): if s1[i] != s2[i]: error[i] = 1 print(error) one_error = 0 two_error = 0 more_than_two_error = 0 k = 0 # 表示连续k个错误 for i in range(n + 1): if error[i] == 1: k += 1 else: if k == 1: one_error += 1 if k == 2: two_error += 1 if k >= 3: more_than_two_error += 1 k = 0 print(f'{one_error} {two_error} {more_than_two_error}') except EOFError: break
第二题:乌龟快跑
1.题目描述
给定一个n*n
的有向图,共有m
条有向边,边的权值代表了该条边上的兔子数量,乌龟要从起始点s
爬到终点t
,但是只允许走x
步(即经过x
条边),题目数据保证满足约束条件的情况下一定存在从起点到终点的路径。
乌龟经过每一条边都会被该条边上的兔子(数量为该边权值)嘲讽,请问这个玻璃心乌龟该走哪条路,能够最小化受到的嘲讽,输出该条路径上兔子最多的边的兔子数量。
(说人话就是从能到达终点的路径中找到最短的路径,输出该条路径上边的最大权值)
输入输出样例
Input:
5 6 1 5 2
1 5 100
1 2 10
2 5 5
1 3 3
3 4 2
4 5 1
Output:
10
输入第一行为n,m,s,t,x
,接下来的m
行为有向边的(起点,终点,权值)
该输入构成的图为:
可以看出从起点2
到终点5
的满足步长为2
的路径有红色和蓝色两条边,其中最短的路径为红色路径,该路径上最大的权值为10
。
2. 解法
图论问题,用dfs遍历
# -*- encoding: utf-8 -*- """ @Author : Soarkey @Date : 2021/3/30 @Desc : 乌龟兔子 """ if __name__ == '__main__': while True: try: n, m, s, t, x = tuple(map(lambda x: int(x), input().split())) graph = [[0 for j in range(n + 1)] for i in range(n + 1)] for _ in range(m): a, b, v = tuple(map(lambda x: int(x), input().split())) graph[a][b] = v # print(graph) path = [] vis = [False for i in range(n + 1)] rabbits = [] min_rabbits = 9999999 def dfs(i, depth): global vis, t, x, graph, min_rabbits, rabbits if i == t: # 找到 # print(rabbits) min_rabbits = min(min_rabbits, max(rabbits)) return if depth >= x: # 超过步长 return for j in range(len(graph[i])): if not vis[j] and graph[i][j] > 0: vis[j] = True rabbits.append(graph[i][j]) dfs(j, depth + 1) rabbits.pop() vis[j] = False dfs(s, 0) print(min_rabbits) except EOFError: break#笔经##SAP公司##Java工程师#