鱼C论坛

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

Python:每日一题 389

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

  2.     def near_check(x,y):
  3.         count = 4
  4.         for i in [[x-1,y],[x+1,y],[x,y-1],[x,y+1]]:
  5.             if i[0] < 0 or i[1] < 0:
  6.                 continue
  7.             try:
  8.                 if chart[i[0]][i[1]]:
  9.                     count -= 1
  10.             except IndexError:
  11.                 continue
  12.         return count

  13.     perimeter = 0
  14.     for x in range(len(chart)):
  15.         for y in range(len(chart[0])):
  16.             if chart[x][y]:
  17.                 perimeter += near_check(x,y)
  18.     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 | 显示全部楼层
  1. def fun389(grid):
  2.     result = 0
  3.     row = 0#同下
  4.     for i in grid:
  5.         square = 0#用于计数,以便找到遍历到哪一个格子里
  6.         for j in i:
  7.             if j == 1:
  8.                 if i[square - 1] == 0 and square != 0:
  9.                     result += 1
  10.                 elif row == 0:
  11.                     result += 1
  12.                 if grid[row - 1][square] == 0 and row != 0:
  13.                     result += 1
  14.                 elif square == 0:
  15.                     result += 1
  16.             square += 1
  17.         row += 1

  18.     result *= 2
  19.     return result

  20. '''
  21. 输入:[
  22. [0, 1, 0, 0],
  23. [1, 1, 1, 0],
  24. [0, 1, 0, 0],
  25. [1, 1, 0, 0]]
  26. 输出:16
  27. 输入:[
  28. [1, 1, 0, 0, 0, 0],
  29. [0, 1, 1, 1, 1, 1],
  30. [0, 1, 1, 1, 0, 0],
  31. [1, 1, 0, 0, 0, 0],
  32. [0, 1, 1, 1, 0, 0]]
  33. 输出:28
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

  6.     for i in range(width):
  7.         for j in range(lenth):
  8.             if matrix[i][j] == 1:
  9.                 #判断该方格上面是否有陆地
  10.                 if i > 0:
  11.                     if matrix[i-1][j] == 0:
  12.                         perimeter += 1
  13.                 else:
  14.                     perimeter += 1

  15.                 #判断方格左边是否有陆地
  16.                 if j > 0:
  17.                     if matrix[i][j-1] == 0:
  18.                         perimeter += 1
  19.                 else:
  20.                     perimeter += 1

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

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

  33.     return perimeter

  34. test = [
  35. [0, 1, 0, 0],
  36. [1, 1, 1, 0],
  37. [0, 1, 0, 0],
  38. [1, 1, 0, 0]
  39. ]
  40. 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[j] == ls[j+1] == 1:
                n2 += 1
    for i in range(len(ls[0])):
        for j in range(len(ls)-1):
            if ls[j] == ls[j+1] == 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-5-13 12:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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