Advertisement

蓝桥杯第十三届青少年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)

还没有任何评论哟~