第 1 题 单选题
下列关于函数的说法正确的是()。
A.函数的定义必须在程序的开头
B.函数定义后,其中的程序就可以自动执行
C.函数定义后需要调用才会执行
D.函数体与关键字def必须左对齐
解析:python中函数定义在调用后才会执行,其他都错的,选C
第 2 题 单选题
十进制数55转换成十六进制是()。
A.110111
B.313
C.37
D.67
解析:55%16=7,55//16=3 因此转换为16进制后为37选C ,
第 3 题 单选题
下列方法中,哪一个可以随机生成一个实数()。
A.random()
B.randrange()
C.getrandbits()
D.randint()
解析:random() 产生一个(0,1)之间的实数,randrange()产生一个对应
区间的整数,getrandbits(k)产生一个不大于k位的整数,randint()产生一
个整数。选A
第 4 题 单选题
已知t=("lan”,“qiao”,“bei"),执行t[::-1]语句输出的结果是()。
A.("bei",“qiao',"lan")
B.[“bei”,“qiao",“lan"]
C.{"bei",“qiao",“lan"}
D.运行报错
解析:t[::-1]将元组中元素倒序,元组有3个字符串元素,因此选A
第 5 题 单选题
字符串的strip方法的作用是()。
A.删除字符串头尾指定的字符
B.删除字符串未尾的指定字符
C.删除字符串头部的指定字符
D.通过指定分隔符对字符串切片
解析:strip方法的知识考察,选A
二、编程题
第1题
题目描述
输入两个字符串s1和s2,然后将s1和s2拼接成一个字符串并输出。
例如:s1='ab',s2='cd',拼接成一个字符串为‘abcd'。
输入格式
第一行输入一个字符串s1
第二行输入一个字符串s2
输出格式
将s2拼接到s1的后边并输出
输入样例
ab
cd
输出样例
abcd
s1=input()
s2=input()
print(s1+s2)
第二题
题目描述
给定一个正整数N,输出正整数N中各数位最大的那个数字,
例如:N=132,则输出3.
输入格式
输入一个正整数N
输出格式
输出正整数N中各数位最大的那个数字
输入样例
132
输出样例
3
解析:方法一:通过取余10的方法拆分数位,找出最大的;方法二:将数字转换成字符串,取字符串中最大的。
n=int(input())
print(max(str()))
第3题
题目描述
小青带着一根长为80厘米的竹竿去摘苹果,当伸手够不到苹果会借助竹竿摘苹果(竹竿碰到苹果就算摘下)。在给定出小青伸手的高度N及每个苹果离地面的高度,请你帮助小青计算出最多能够摘到多少苹果。
例如:N=120,苹果高度分别为130,220,153,200,最多可以摘到3个苹果,高度为220的苹果即使使用竹竿也摘不到。
输入格式
第一行输入一个正整数N(120<=N<=200),表示小青伸手高度(单位:厘米)
第二行输入多个正整数,表示每个苹果距离地面的高度,正整数之间以一个英文逗号隔开(单位:厘米)
输出格式
输出一个整数,表示小青最多可以摘到的苹果数
输入样例
120
130,220,153,200
输出样例
3
l=int(input())+80
h=eval(input())
ans=0
for i in h:
if i<=l:
ans+=1
print(ans)
第4题
题目描述
小马需要将N件物品从河的一岸搬运到河的另一岸,每次搬运的物品为1到3件。
请问小马将N件物品全部搬运过去有多少种方案。
例如:N=3,将3件物品全部搬运过去有4种方案:
方案一:第一次搬运1件,第二次搬运1件,第三次搬运1件:
方案二:第一次搬运1件,第二次搬运2件:
方案三:第一次搬运2件,第二次搬运1件:
方案四:一次搬运3件。
输入格式
输入一个正整数N,表示需要搬运的物品数
输出格式
输出将N件物品全部搬运过去有多少种方案
输入样例
3
输出样例
4
解析:一次可以搬1件,2件,3件,因此要搬k件可以有三类方法,先(k-1)然后1,或者先(k-2),然后2,或者先(k-3),然后3,用递推就可以了。
n=int(input())
a=[1,1,2]
for i in range(3,n+1):
a[i]=a[i-1]+a[i-2]+a[i-3]
print(a[n])
第5题
题目描述
有一片海域划分为N*M个方格,具中有些海域已经被污梁(用0表示),有一些海域没被污染用1表示):
请问这片N*M海域中有几块是没被污染的独立海域(没被污染的独立海域是指该海域上下左右被已污染的海域包围,且N*M以外的海域都为已被污染的海域)
例如:N=4,M=5,4*5的海域中,已被污染海域和设被污染的海域如下图:这块4*5的海域,有3块海域(绿色)没被污染,因为每一块的上下左右都被污染的的海域包围。
输入格式
第一行输入两个整数N和M,N表示矩阵方格的行,M表示矩阵方格的列,N和M之间以一个英文逗号隔开。
第二行开始输入N行,每行M个数字(数字只能为1或者0,1表示没被污染的海域,0表示已被污染的海域)。
输出格式
输出一个整数,表示N*M的海域中有几块是没被污染的独立海域。
解析:连通块模板题DFS解决。
def dfs(i,j):
for o in range(4):
x=i+dx[o]
y=j+dy[o]
if x>=0 and x=0 and y
第6题
输入描述
第一行输入两个整数N和M(1≤N≤100,1≤M≤100),N表示矩阵的行数,M表示矩阵的列数,两个整数之间一个空格隔开
接下来输入N行,每行包括M个0或者1(0表示方格中没有奖品,1表示方格中有奖品),0或者1之间一个空格隔开
输出描述
输出一个整数,表示最多可获得的奖品数
样例输入
5 6
1 0 1 0 0 0
0 1 0 1 0 0
1 0 0 0 1 0
0 1 0 0 0 1
1 0 1 0 0 0
样例输出
4
解析:可以直接暴力,时间复杂度O(N*N*M*M)会超时,预处理二维前缀和,枚举一个起点,然后以这个起点找对角线,找到所有满足条件的对角线,每次找到一个终点,求这个矩形的数据和,如果数据和=正方形的边长,说明其他位置没有1,找到最大的答案即可,时间复杂度为O(N*M*N)。
n, m = (int(x) for x in input().split())
a = [[0 for x in range(m+1)]]
for i in range(n):
b = [0] + [int(x) for x in input().split()]
a.append(b)
# 预处理前缀和数组
s = [[0 for x in range(105)] for y in range(105)]
for i in range(1, n + 1):
for j in range(1, m + 1):
s[i][j] = s[i - 1][j] + s[i][j - 1] + a[i][j] - s[i - 1][j - 1]
def ss(c, d, e, f):
# 求坐上角为cd,右下角为ef的正方形的数据和
return s[e][f] - s[c - 1][f] - s[e][d - 1] + s[c - 1][d - 1]
def work(x, y):
# 以(x,y)为上方,求解能找到的最大的答案
# 往右下走t步
t = 1
kx = x + t
ky = y + t
while (kx <= n and ky <= m and a[kx][ky] == 1 and ss(x, y, kx, ky) == t + 1):
t += 1
kx = x + t
ky = y + t
res = t
# 往左下走t步
t = 1
kx = x + t
ky = y - t
while (kx <= n and ky >= 1 and a[kx][ky] == 1 and ss(x, ky, kx, y) == t + 1):
t += 1
kx = x + t
ky = y - t
res = max(t,res)
return res
ans=0
for i in range(1,n+1):
for j in range(1,m+1):
if a[i][j]==1:
if work(i,j)>ans:
ans=work(i,j)
print(ans)
以上参考的微信公众号:JOY的课堂