鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: zltzlt

Python:每日一题 389

[复制链接]
发表于 2020-5-8 16:55:14 | 显示全部楼层
def fun389(chart):

    def near_check(x,y):
        count = 4
        for i in [[x-1,y],[x+1,y],[x,y-1],[x,y+1]]:
            if i[0] < 0 or i[1] < 0:
                continue
            try:
                if chart[i[0]][i[1]]:
                    count -= 1
            except IndexError:
                continue
        return count

    perimeter = 0
    for x in range(len(chart)):
        for y in range(len(chart[0])):
            if chart[x][y]:
                perimeter += near_check(x,y)
    return perimeter
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-11 21:43:17 | 显示全部楼层
占楼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-15 22:38:49 | 显示全部楼层
def graid_lake(k=None):
    k = [
        [0, 1, 0, 0],
        [1, 1, 1, 0],
        [0, 1, 0, 0],
        [1, 1, 0, 0]
    ]
    total_grid = 0
   
    for (x, a) in enumerate(k):
        for (y, b) in enumerate(a):
            # x,y为横纵坐标,a,b为各自元素
            if b == 1:
                # 判断是否为顶边或者上边可以有边
                if (x == 0) or (k[x - 1][y] == 0):
                    top = 1
                else:
                    top = 0
                    
                # 判断是否为底边或者下边可以有边
                if (x == len(k) - 1) or (k[x + 1][y] == 0):
                    bottom = 1
                else:
                    bottom = 0
                    
                # 判断是否为最左边或者左边可以有边
                if (y == 0) or (k[x][y - 1] == 0):
                    left = 1
                else:
                    left = 0
                    
                # 判断是否为最右边或者右边可以有边
                if (y == len(a) - 1) or (k[x][y + 1] == 0):
                    right = 1
                else:
                    right = 0
                    
                total_grid += (top + bottom + right + left)
        return total_grid
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-17 08:11:32 | 显示全部楼层
def fun389(grid):
    result = 0
    row = 0#同下
    for i in grid:
        square = 0#用于计数,以便找到遍历到哪一个格子里
        for j in i:
            if j == 1:
                if i[square - 1] == 0 and square != 0:
                    result += 1
                elif row == 0:
                    result += 1
                if grid[row - 1][square] == 0 and row != 0:
                    result += 1
                elif square == 0:
                    result += 1
            square += 1
        row += 1

    result *= 2
    return result

'''
输入:[
[0, 1, 0, 0],
[1, 1, 1, 0],
[0, 1, 0, 0],
[1, 1, 0, 0]]
输出:16
输入:[
[1, 1, 0, 0, 0, 0],
[0, 1, 1, 1, 1, 1],
[0, 1, 1, 1, 0, 0],
[1, 1, 0, 0, 0, 0],
[0, 1, 1, 1, 0, 0]]
输出:28
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-19 21:46:16 | 显示全部楼层
def solution(matrix):
    #输入一个矩阵,获得矩阵的长和宽
    width = len(matrix)
    lenth = len(matrix[0])
    perimeter = 0

    for i in range(width):
        for j in range(lenth):
            if matrix[i][j] == 1:
                #判断该方格上面是否有陆地
                if i > 0:
                    if matrix[i-1][j] == 0:
                        perimeter += 1
                else:
                    perimeter += 1

                #判断方格左边是否有陆地
                if j > 0:
                    if matrix[i][j-1] == 0:
                        perimeter += 1
                else:
                    perimeter += 1

                #判断方格右边是否有陆地
                if j < (lenth-1):
                    if matrix[i][j+1] == 0:
                        perimeter += 1
                else:
                    perimeter += 1

                #判断方格下方是否有陆地
                if i < (width-1):
                    if matrix[i+1][j] == 0:
                        perimeter += 1
                else:
                    perimeter += 1

    return perimeter

test = [
[0, 1, 0, 0],
[1, 1, 1, 0],
[0, 1, 0, 0],
[1, 1, 0, 0]
]
print(solution(test))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-22 17:41:39 | 显示全部楼层
本帖最后由 huainian2333 于 2020-5-22 19:29 编辑

def fun(ls):
    n1,n2 = sum([sum(i) for i in ls]),0
    for i in range(len(ls)):
        for j in range(len(ls[0])-1):
            if ls[i][j] == ls[i][j+1] == 1:
                n2 += 1
    for i in range(len(ls[0])):
        for j in range(len(ls)-1):
            if ls[j][i] == ls[j+1][i] == 1:
                n2 += 1
    return (4 * n1 - 2 * n2)

ls = eval(input())
print(fun(ls))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-31 10:46:32 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-31 11:57:29 | 显示全部楼层
def fun389(grid):
        i = len(grid)
        k = 0
        for a in range(i):
                for b in range(i):
                        if grid[a][b] == 1:
                                k += 1
        result = k*4
        count = 0
        for a in range(i):
                for b in range(i-1):
                        if grid[a][b] + grid[a][b+1] == 2:
                                count += 1
        for a in range(i-1):
                for b in range(i):
                        if grid[a][b] + grid[a+1][b] == 2:
                                count += 1
        result = result - count*2
        return result
       
grid1 = [
[0,1,0,0],
[1,1,1,0],
[0,1,0,0],
[1,1,0,0]
]

print(fun389(grid1))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 11:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表