2024-04-27:用go语言,在一个下标从 1 开始的 8 x 8 棋盘上,有三个棋子,分别是白色车、白色象和黑色皇后。 给定这三个棋子的位置,请计算出要捕获黑色皇后所需的最少移动次数。 需要注意
2024-04-27:用go语言,在一个下标从 1 开始的 8 x 8 棋盘上,有三个棋子,分别是白色车、白色象和黑色皇后。
给定这三个棋子的位置,请计算出要捕获黑色皇后所需的最少移动次数。
需要注意的是,白色车可以垂直或水平移动,而白色象可以沿对角线移动,它们不能跳过其他棋子。
如果白色车或白色象可以移动到黑色皇后的位置上,即认为它们能够捕获黑色皇后。
请注意,黑色皇后自身不能进行移动。
输入:a = 1, b = 1, c = 8, d = 8, e = 2, f = 3。
输出:2。
答案2024-04-27:
题目来自leetcode3001。
大体步骤如下:
1.首先,我们定义了棋盘的大小为8x8,使用下标从1开始计数。
2.给定了三个棋子的位置:白色车的位置是(a, b),白色象的位置是(c, d),黑色皇后的位置是(e, f)。
3.我们需要计算出将黑色皇后捕获所需的最少移动次数。
4.首先,我们检查白色车是否能够捕获黑色皇后。白色车可以在垂直方向(同一列)或水平方向(同一行)上移动。如果白色车的行号(a)等于黑色皇后的行号(e),并且它们不在同一列(c != e),或者列号(b)等于黑色皇后的列号(f),并且它们不在同一行(d != f),则白色车可以捕获黑色皇后。这种情况下,返回移动次数1。
5.如果白色车不能捕获黑色皇后,则继续检查白色象是否能够捕获黑色皇后。白色象可以沿对角线移动。首先判断两个位置(c, d)和(e, f)是否在同一条对角线上。如果它们在同一条对角线上,那么判断白色象是否能够捕获黑色皇后取决于两个条件:一是白色象的行号(c)和列号(d)之差的绝对值等于黑色皇后的行号(e)和列号(f)之差的绝对值,二是白色象所经过的格子上没有其他棋子。如果满足这两个条件,则白色象可以捕获黑色皇后。这种情况下,返回移动次数1。
6.如果白色车和白色象都不能捕获黑色皇后,则返回移动次数2,表示无法捕获。
7.最后,根据输入的位置计算出结果为2。
时间复杂度为O(1),因为只有一组输入,没有循环或递归操作。
额外空间复杂度为O(1),因为只使用了固定数量的变量来存储输入和中间结果。
Go完整代码如下:
package main
import (
"fmt"
)
func main() {
a := 1
b := 1
c := 8
d := 8
e := 2
f := 3
result := minMovesToCaptureTheQueen(a, b, c, d, e, f)
fmt.Println(result)
}
func minMovesToCaptureTheQueen(a, b, c, d, e, f int) int {
if a == e && (c != e || ok(b, d, f)) ||
b == f && (d != f || ok(a, c, e)) ||
c+d == e+f && (a+b != e+f || ok(c, a, e)) ||
c-d == e-f && (a-b != e-f || ok(c, a, e)) {
return 1
}
return 2
}
func ok(l, m, r int) bool {
return m < min(l, r) || m > max(l, r)
}
func min(a, b int) int {
if a < b {
return a
}
return b
}
func max(a, b int) int {
if a > b {
return a
}
return b
}

Python完整代码如下:
# -*-coding:utf-8-*-
def main():
a = 1
b = 1
c = 8
d = 8
e = 2
f = 3
result = min_moves_to_capture_the_queen(a, b, c, d, e, f)
print(result)
def min_moves_to_capture_the_queen(a, b, c, d, e, f):
if a == e and (c != e or ok(b, d, f)) or \
b == f and (d != f or ok(a, c, e)) or \
c+d == e+f and (a+b != e+f or ok(c, a, e)) or \
c-d == e-f and (a-b != e-f or ok(c, a, e)):
return 1
return 2
def ok(l, m, r):
return m < min(l, r) or m > max(l, r)
def min(a, b):
if a < b:
return a
return b
def max(a, b):
if a > b:
return a
return b
if __name__ == "__main__":
main()

2024-04-27:用go语言,在一个下标从 1 开始的 8 x 8 棋盘上,有三个棋子,分别是白色车、白色象和黑色皇后。 给定这三个棋子的位置,请计算出要捕获黑色皇后所需的最少移动次数。 需要注意的更多相关文章
- 在8X8的棋盘上分布着n个骑士,他们想约在某一个格中聚会。骑士每天可以像国际象棋中的马那样移动一次,可以从中间像8个方向移动(当然不能走出棋盘),请计算n个骑士的最早聚会地点和要走多少天。要求尽早聚会
在8X8的棋盘上分布着n个骑士,他们想约在某一个格中聚会.骑士每天可以像国际象棋中的马那样移动一次,可以从中间像8个方向移动(当然不能走出棋盘),请计算n个骑士的最早聚会地点和要走多少天.要求尽早聚会 ...
- 【组合数学+动态规划】在如下8*6的矩阵中,请计算从A移动到B一共有____种走法。要求每次只能向上或向右移动一格,并且不能经过P。
在如下8*6的矩阵中,请计算从A移动到B一共有__种走法.要求每次只能向上或向右移动一格,并且不能经过P. A:456 B:492 C:568 D:626 E:680 F:702 解析: 8*6的矩阵 ...
- Ubuntu 12.04上安装R语言
Ubuntu 12.04上安装R语言 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ R的安装 sudo gedit /etc/apt/sources. ...
- python 练习题:小明的成绩从去年的72分提升到了今年的85分,请计算小明成绩提升的百分点
# -*- coding: utf-8 -*- # 小明的成绩从去年的72分提升到了今年的85分,请计算小明成绩提升的百分点,并用字符串格式化显示出'xx.x%',只保留小数点后1位. s1 = 72 ...
- Ubuntu 18.04 安装配置 go 语言
Ubuntu 18.04 安装配置 go 语言 1.下载 下载 jdk 到 Downloands 文件夹下 cd 进入 /usr/local, 创建 go 文件夹, 然后 cd 进这个文件夹 cd / ...
- 【Java】一个小程序,计算它包含的代码所需的耗时
写一个小程序,用来计算它包含的代码所需的耗时.虽然简单,测试代码是否耗时还是有点用的,不用重新写嘛~ import java.util.Date; import java.util.concurren ...
- 一张表有三个字段:id(城市id) Cityname(城市名) Privence(所属省份)如果要统计每个省份有多少城市请用SQL实现。
一张表有三个字段:id(城市id) Cityname(城市名) Privence(所属省份)如果要统计每个省份有多少城市请用SQL实现.
- 给出两个单词word1和word2,写一个函数计算出将word1 转换为word2的最少操作次数。
问题: 给出两个单词word1和word2,写一个函数计算出将word1 转换为word2的最少操作次数. 你总共三种操作方法: 1.插入一个字符 2.删除一个字符 3.替换一个字符 格式: 输入行输 ...
- 在4x4的棋盘上摆满了黑白棋子,黑白两色的位置和数目随机其中左上角坐标为(1,1),右下角坐标为(4,4),现在依次有一些翻转操作,要对一些给定支点坐标为中心的上下左右四个棋子的颜色进行翻转,请计算出翻转后的棋盘颜色。
// ConsoleApplication10.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream& ...
- 2015年4月27日---C语言:输出特殊图案,请在c环境中运行,看一看,Very Beautiful!
---恢复内容开始--- 题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful! 1.程序分析:字符共有256个.不同字符,图形不一样. 2.程序源代码: [code=c] #i ...
随机推荐
- GPT-SoVITS教程,接入酒馆AI,SillyTavern-1.11.5,让AI女友声若幽兰
本次分享一下如何将GPT-SoVITS接入SillyTavern-1.11.5项目,让让AI女友声若幽兰,首先明确一下,SillyTavern-1.11.5只是一个前端项目,它没有任何大模型文本生成能 ...
- 运行xxl-job,整合xxl-job至jeecg-boot项目
1.前言:xxl-job是一个分布式任务调度平台,其核心设计目标是开发迅速.学习简单.轻量级.易扩展.现已开放源代码并接入多家公司线上产品线,开箱即用. 源码仓库地址:https://gitee.co ...
- KingbaseES V8R3 集群运维案例 --操作系统‘soft lockup’引起的failover切换
案例说明: 在国产中标麒麟系统生产环境中,监控发现KingbaseES V8R3集群发生了failover的主备切换,客户需要给出分析报告,说明此次集群发生failover切换的原因,本次文档通过分析 ...
- KingbaseES Json 系列六:Json记录操作函数一
KingbaseES Json 系列六--Json记录操作函数一(JSONB_TO_RECORD,JSONB_TO_RECORDSET,JSON_TO_RECORD,JSON_TO_RECORDSET ...
- Linux电脑如何下载QGIS?
本文介绍在Linux操作系统Ubuntu版本中,通过命令行的方式,配置QGIS软件的方法. 在Ubuntu等Linux系统中,可以对空间信息加以可视化的遥感.GIS软件很少,比如ArcGIS下 ...
- Scala 元祖Tuple
1 package chapter07 2 3 object Test10_Tuple { 4 def main(args: Array[String]): Unit = { 5 // 1. 创建元组 ...
- #斐波那契#洛谷 3424 [POI2005] SUM-Fibonacci Sums
题目 已知\(x,y\)的斐波那契表示,求\(x+y\)的斐波那契表示 分析 显然得到两条性质: \(f_{i+1}=f_{i-1}+f_i\) \(2f_i=f_{i+1}+f_{i-2}\) 那么 ...
- #树状数组#洛谷 5677 [GZOI2017]配对统计
题目 分析 考虑处理出所有右端点的能够匹配的左端点,然后用树状数组离线查询 代码 #include <cstdio> #include <cctype> #include &l ...
- OpenHarmony自定义组件介绍
一.创建自定义组件 在ArkUI中,UI显示的内容均为组件,由框架直接提供的称为系统组件,由开发者定义的称为自定义组件.在进行 UI 界面开发时,通常不是简单的将系统组件进行组合使用,而是需要考虑 ...
- 在DAYU200上实现OpenHarmony视频播放器
内容简介 本文介绍了如何使用ArkUI框架提供的video组件,实现一个具有简易播放器.通过VideoController控制器来控制倍速.全屏.进度调节等功能. 由于使用本地视频文件会影响App的包 ...