蓝桥杯第十三届青少年Python组省赛试题
发布时间
阅读量:
阅读量
该文本包含多个Python代码块,涉及以下功能:
第一个代码块简单地读取两个输入值并输出它们的和。
第二个代码块读取输入并处理列表,计算满足条件的元素数量。
第三个代码块是一个递归函数,用于计算大于等于4时的方案数。
第四个代码块处理一个二维数组,统计独立区域的数量。
第五个代码块计算矩阵中对角线最长的1的长度。
这些代码涵盖了输入处理、列表操作、递归计算、矩阵分析和算法优化等功能。

print(input()+input())

n=' '.join(input()).split()
print(max(n))

n=int(input())
hs=list(eval(input()))
cnt=0
for h in hs:
if n+80>=h:
cnt+=1
print(cnt)

n=int(input())
def ban(n):
if n==1: #1的时候1种方案
return 1
elif n==2: #2的时候1种方案
return 2
elif n==3: #3的时候4种方案
return 4
else:
return ban(n-3)+ban(n-2)+ban(n-1) #大于等于4时,总方案数=(n-3)的方案数+(n-2)的方案数+(n-1)的方案数
print(ban(n))



n,m=eval(input())
nums=[list(eval(input())) for i in range(n)]
ts=[[False for j in range(m)] for i in range(n)]
cnt=0
for i in range(n):
for j in range(m):
if not ts[i][j] and nums[i][j]:
ts[i][j]=True
cnt+=1
ii=i
jj=j
#向右
while jj+1<m:
jj+=1
if nums[ii][jj]: #没污染,标记True
if ts[ii][jj]: #之前已经标记过True,不是新的独立海域,把一开始的+1减去
cnt-=1
ts[ii][jj]=True
else:
break
jj=j
#向下
while ii+1<n:
ii+=1
if nums[ii][jj]: #没污染,标记True
ts[ii][jj]=True
else:
break
ii=i
#向上
y=True #判断用于避免向左cnt重复-1
while ii-1>=0:
ii-=1
if nums[ii][jj]:
cnt-=1 #和之前的大陆相连,不是新的独立海域,把一开始的+1减去
y=False #相连减了一次
break
ii=i
#向左
while jj-1>=0:
jj-=1
if nums[ii][jj] and y:
cnt-=1 ##和之前的大陆相连且非第一次,非新的独立海域,把一开始的+1减去
break
jj=j
print(cnt)



n,m=list(map(int,input().split()))
nums=[list(map(int,input().split())) for i in range(n)]
#判断左斜线/长度
def find_left(ii,jj):
long=0
s=ii+jj
for i in range(ii,n):
for j in range(m):
if i+j==s :
if nums[i][j]==1:
long+=1
global max_long
if long>max_long: #如果/斜线长度大于最大的左斜线长度,判断是否符合正方形
start_jj=jj-long+1
end_ii=ii+long-1
mark=True #标记默认正方形
for i in range(ii,end_ii+1):
for j in range(start_jj,jj+1):
if nums[i][j]==1 and i+j!=s:
mark=False #不符合正方形条件
if mark:
max_long=long
else: #和相等又不是1,说明/已中断,不需要继续往下找
return
#判断右斜线\长度
def find_right(ii,jj):
long=0
s=ii-jj
for i in range(ii,n):
for j in range(m):
if i-j==s :
if nums[i][j]==1:
long+=1
global max_long
if long>max_long: #如果/斜线长度大于最大的左斜线长度,判断是否符合正方形
end_jj=jj+long-1
end_ii=ii+long-1
mark=True #标记默认正方形
for i in range(ii,end_ii):
for j in range(jj,end_jj):
if nums[i][j]==1 and i-j!=s:
mark=False #不符合正方形条件
if mark:
max_long=long
else: #差相等又不是1,说明\已中断,不需要继续往下找
return
# 循环判断每一个点
max_long=0 #最大长度
for i in range(n):
for j in range(m):
if nums[i][j]==1:
find_left(i,j) #找左边/长度
find_right(i,j) #找右边\长度
print(max_long)
全部评论 (0)
还没有任何评论哟~
