当前位置: 首页 > news >正文

2023华为od机试C卷【围棋的气】python实现

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

def cal (num,elements):
#创建有效位置矩阵matrix =  [[0]*19 for _ in range(19)]for i in range(0,len(num),2):x = num[i]y = num[i+1]if x > 0:matrix[x-1][y] = 1if x < 18:matrix[x+1][y] = 1if y > 0 :matrix[x][y-1] = 1if y < 18:matrix[x][y+1] = 1res = 0for i in range(19):for j in range(19):if matrix[i][j] == 1 and elements[i][j] != 1:res += 1print(res)
def main():input_black = list(map(int,input().split()))input_white = list(map(int,input().split()))#创建旗子矩阵elements = [[0]*19 for _ in range(19)]for i in range(0,len(input_black),2):elements[input_black[i]][input_black[i+1]] = 1for i in range(0,len(input_white),2):elements[input_white[i]][input_white[i+1]] = 1cal(input_black,elements)cal(input_white,elements)if __name__ == "__main__":main()

这段代码的主要功能是计算棋盘上黑色和白色棋子之间的有效位置。下面对代码逐行进行解释:

1. cal(num, elements) 函数

该函数的目的是计算黑色或白色棋子所能到达的有效位置数量。

  • 参数
    • num: 输入的棋子位置,包含X和Y坐标。
    • elements: 代表棋盘上棋子的矩阵,值为1表示该位置有棋子,值为0表示该位置没有棋子。
代码分析
matrix = [[0]*19 for _ in range(19)]

创建了一个19x19的矩阵,初始化所有元素为0。

for i in range(0,len(num),2):x = num[i]y = num[i+1]

遍历 num 列表中的坐标,步长为2,以便提取X和Y坐标。

    if x > 0:matrix[x-1][y] = 1if x < 18:matrix[x+1][y] = 1if y > 0:matrix[x][y-1] = 1if y < 18:matrix[x][y+1] = 1

对于每个棋子的位置 (x, y),检查其上下左右的位置,如果在棋盘范围内则将这些位置标记为1,这是有效的位置。

res = 0
for i in range(19):for j in range(19):if matrix[i][j] == 1 and elements[i][j] != 1:res += 1

遍历 matrix,检查是否有有效位置 (matrix[i][j] == 1) 且该位置在 elements 矩阵中没有棋子 (elements[i][j] != 1)。如果条件成立,则将 res 计数加一。

print(res)

输出有效位置的总数。

2. main() 函数

该函数负责获取输入并填充 elements 矩阵。

input_black = list(map(int, input().split()))
input_white = list(map(int, input().split()))

从用户获取黑色和白色棋子的位置,并将输入的字符串转换成整型列表。

elements = [[0]*19 for _ in range(19)]

创建一个19x19的矩阵来表示棋盘上的棋子状态。

for i in range(0,len(input_black),2):elements[input_black[i]][input_black[i+1]] = 1
for i in range(0,len(input_white),2):elements[input_white[i]][input_white[i+1]] = 1

将黑色和白色棋子的位置标记在 elements 矩阵中。

cal(input_black, elements)
cal(input_white, elements)

调用 cal 函数分别计算黑色和白色棋子能达到的有效位置数量。

3. if __name__ == "__main__":

这部分代码用于确保代码是作为主程序运行时执行 main() 函数。

总结

这段代码的功能是计算给定黑色和白色棋子的位置,通过对棋盘的有效邻接位置进行遍历,最终输出各自可达到的有效位置总数。通过matrix标记每个棋子能到达的有效位置,并确保这些位置不是已经被占用。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 哈萨克语驾考学习软件求推荐?
  • Springboot项目基础开发模式+注解
  • 【香橙派系列教程】(十三) 香橙派的摄像头接入
  • 【Pyspark-驯化】一文搞懂Pyspark修改hive表描述以及增加列使用技巧
  • 简单的射箭小游戏网页源码
  • 表字段显示tip
  • 【数据结构题目】循环队列,以及队列实现栈的模拟
  • C语言 | Leetcode C语言题解之第332题重新安排行程
  • Android 下载安装配置
  • 探索Python模块搜索路径的奥秘
  • Python中的责任链模式:构建灵活的请求处理机制
  • Python知识点:使用FastAI进行快速深度学习模型构建
  • 初学java第一天:写一下熟悉的猜数字小游戏
  • C#类继承自泛型集合
  • Linux 进程调度(二)之进程的上下文切换
  • CSS中外联样式表代表的含义
  • gops —— Go 程序诊断分析工具
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • vuex 学习笔记 01
  • 爱情 北京女病人
  • 从伪并行的 Python 多线程说起
  • 电商搜索引擎的架构设计和性能优化
  • 巧用 TypeScript (一)
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 运行时添加log4j2的appender
  • UI设计初学者应该如何入门?
  • ​【数据结构与算法】冒泡排序:简单易懂的排序算法解析
  • #stm32整理(一)flash读写
  • #每日一题合集#牛客JZ23-JZ33
  • (4)logging(日志模块)
  • (Python) SOAP Web Service (HTTP POST)
  • (蓝桥杯每日一题)love
  • (十一)图像的罗伯特梯度锐化
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)setTimeout 和 setInterval 的区别
  • (转)重识new
  • *算法训练(leetcode)第四十天 | 647. 回文子串、516. 最长回文子序列
  • ./configure,make,make install的作用(转)
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .NET编程——利用C#调用海康机器人工业相机SDK实现回调取图与软触发取图【含免费源码】
  • .NET成年了,然后呢?
  • .NET开发人员必知的八个网站
  • .net快速开发框架源码分享
  • .net专家(张羿专栏)
  • .sh
  • /dev下添加设备节点的方法步骤(通过device_create)
  • @Bean有哪些属性
  • [1525]字符统计2 (哈希)SDUT
  • [AI Google] 使用 Gemini 取得更多成就:试用 1.5 Pro 和更多智能功能