我的博客

2020-04-20 笔试

目录
  1. 选择
  2. 编程
    1. 第一题
    2. 第二题

某所的 python 开发的笔试题,编程题很简单,选择题还有几个不错的。

选择

只记录几道看代码写输出的题目:

1
2
3
a ={} 
a.fromkeys(['a', 'b', 'c', 'd'], 100)
print (a)

{}

1
2
print(0.5 + 0.5 == 1)
print(0.1 + 0.2 == 0.3)

True
False

实际上 0.1 + 0.2 的结果是:0.30000000000000004,浮点数比较可以通过两数相减,取绝对值,如果小于一个很小的数(如 1e-6)就认为相等。

编程

第一题

题目描述
疫情正在某大洋岛国蔓延,且有失控之势。为了保证该国人民的安全,该国元首决定发挥该国岛屿众多的优势,将健康的人群送到该国的各个岛屿上去,这样就可以有效对人群进行隔离。

作为一名政府公务员,现在你被授命统计本国的岛屿数量。陆地和海洋已经在地图上按照网格的方式给标注出来了,例如:

11110
11010
11001
00000

其中,1表示陆地,0表示海洋,而所谓岛屿,是由若干块连续的陆地连接成的区域。当然,作为处于大洋中的岛国,在网格之外的四个边缘都是海洋区域。因此,上面这块地图中,有2个岛屿,第一个岛屿一共占9块网格,第二个岛屿占1块网格。下面是另一个区域的网格图:

11000
10000
00100
00010

可以看到,这个地图上,有三个岛屿,分别占3块、1块、1块网格。

为了提高效率,现在你准备用一个程序来统计任一区域中的岛屿数量,请写出程序。

输入描述:
输入一个二维数组,只有0和1,分别表示该区域的海洋和陆地。

输出描述:
输出一个数字,表示该数组表示的区域的岛屿数量。

示例 (输入输出示例仅供调试,后台判题数据一般不包含示例)
示例1
输入

1,1,1,1,0
1,1,0,1,0
1,1,0,0,1
1,0,0,0,0

输出

2

示例2

输入
1,0,0,1,0
1,1,0,1,0
0,0,1,0,1
0,0,0,0,1
0,1,1,1,1

输出

4

题目提示
1.本系统是构建在Ubuntu 14.04 64位操作系统之上,所有文件名大小写敏感,在c/c++引用头文件时尤其需要注意;

  1. 请不要自行输出提示信息,例如:printf(“Please input two numbers: “)、raw_input(‘Please input two numbers: ‘)等等,这将会导致您的答案不正确,因为任何的输出到屏幕都会作为您答案的一部分;

3.系统对于每一道编程试题均提供实时评测结果,您可在考试允许时间内多次提交您的代码以获得您所希望得到的结果,系统将以您的最后一次提交结果为准,但提交次数也将作为考试成绩的一部分。

4.请严格依照题目描述的格式输入输出数据,尤其参照试题所提供的样例,当然试题的样例输入/输出并不代表评测试题的全部数据。

5.关于自测,您可在页面左下角的输入框内填写输入数据,再点击保存并调试,即可看到程序输出的结果。

6.Python使用的是2.7&3两个版本,缩进可以使用tab、4个空格或2个空格,但是只能任选其中一种,不能多种混用;如果使用sys.stdin.readline,因为默认会带换行符,所以要strip(‘\n’)进行截取;建议使用raw_input()。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import sys
mp = []
for l in sys.stdin:
l = l.strip()
if not l:
break
mp.append(list(map(int, l.strip().split(','))))
n = len(mp)
m = len(mp[0])
f = [[False] * m for _ in range(n)]
def vis(i, j):
f[i][j] = True
for x, y in [(0,1), (1,0), (0,-1), (-1,0)]:
if 0 <= i + x < n and 0 <= j + y < m and f[i+x][j+y] == False and mp[i+x][j+y] == 1:
vis(i+x, j+y)
c = 0
for i in range(n):
for j in range(m):

if f[i][j] == False and mp[i][j] == 1:
vis(i, j)
c += 1
print(c)

第二题

题目描述
你在读的经营课程上,老师布置了一道作业。在一家公司的日常运营中,是会对一些商品的价格走势根据一些经验和数据进行预估,并据此进行决策。例如,假设某商品每天的价格都有可能变动,我们要做的就是低买高卖获得最高利润。比如假设我们预估该商品接下来七天内的价格走势如下:

4,1,2,3,6,4,8

那我们采取的最佳策略是在价格1块钱的时候买入,在价格8块钱的时候卖出。为了简化整个过程,我们限定在此周期内只能有一次买入一次卖出,且商品在没有购入前是无法卖出的,即该商品不是期货而是现货。

现要求你用程序来实现自动决策。输入一定天数的商品预估价格,自动计算出最优利润值。例如,上面的例子中,最优利润值为8-1=7。

输入描述:
输入一个数组,分别表示各天的预估价格

输出描述:
根据输入的预估价格,算出并输出最优的利润值。

示例 (输入输出示例仅供调试,后台判题数据一般不包含示例)
示例1
输入

4,1,2,3,6,4,8

输出

7

示例2
输入

5,3,8,2,5,8,4

输出

6

示例3
输入

10,8,7,5,4,2

输出

0

题目提示

  1. 本系统是构建在Ubuntu 14.04 64位操作系统之上,所有文件名大小写敏感,在c/c++引用头文件时尤其需要注意;

  2. 请不要自行输出提示信息,例如:printf(“Please input two numbers: “)、raw_input(‘Please input two numbers: ‘)等等,这将会导致您的答案不正确,因为任何的输出到屏幕都会作为您答案的一部分;

  3. 系统对于每一道编程试题均提供实时评测结果,您可在考试允许时间内多次提交您的代码以获得您所希望得到的结果,系统将以您的最后一次提交结果为准,但提交次数也将作为考试成绩的一部分。

  4. 请严格依照题目描述的格式输入输出数据,尤其参照试题所提供的样例,当然试题的样例输入/输出并不代表评测试题的全部数据。

  5. 关于自测,您可在页面左下角的输入框内填写输入数据,再点击保存并调试,即可看到程序输出的结果。

  6. Python使用的是2.7&3两个版本,缩进可以使用tab、4个空格或2个空格,但是只能任选其中一种,不能多种混用;如果使用sys.stdin.readline,因为默认会带换行符,所以要strip(‘\n’)进行截取;建议使用raw_input()。

1
2
3
4
5
6
7
8
9
10
p = list(map(int, input().split(',')))
mp = []
m = p[0]
for x in p:
m = min(m, x)
mp.append(m)
a = 0
for m, x in zip(mp, p):
a = max(x-m, a)
print(a)

评论无需登录,可以匿名,欢迎评论!