连续字符序列 | 豆包MarsCode AI刷题

87 阅读4分钟
题目

小M有一个二进制字符串 s,以及一个正整数n。小M想知道,对于[1,n]范围内的每个整数,其二进制表示是否都是字符串s的某个子字符串。一个子字符串是字符串中的连续字符序列。

如果s包含[1,n]范围内每个整数的二进制表示,返回 true,否则返回 false。

测试样例

样例1:

输入:s=“0110",n=3

输出:True

样例2:

输入:s=“1001",n=4

输出:False

样例3:

输入:s="1100101",n=6

输出:True

解题思路
  1. 遍历从 1n 的每个整数。
  2. 将每个整数转换为其二进制表示的字符串。
  3. 检查这个二进制字符串是否是 s 的子字符串。
  4. 如果所有整数的二进制表示都是 s 的子字符串,则返回 True,否则在发现第一个不匹配的整数时返回 False
代码实现
def solution(s: str, n: int) -> bool:
    # 遍历从1到n的每个整数
    for i in range(1, n + 1):
        # 将整数转换为二进制字符串,并去掉前缀'0b'
        binary_str = bin(i)[2:]
        # 检查二进制字符串是否是s的子字符串
        if binary_str not in s:
            return False
    return True

if __name__ == '__main__':
    print(solution(s="0110", n=3) == True)
    print(solution(s="1001", n=4) == False)
    print(solution(s="1100101", n=6) == True)
题目

给个知形和六固定点需要计算一个以点户为圆心明最小员,使得以员元全全覆孟的矩形,并计算该圆的面积。圆的半径是点P 到矩形四个顶点中最远距离,而面积可以通过公式 A= π·/ 来计算。需要注意的是,兀取值为 3.1415926536。

例如,给定矩形的左下角坐标为(X,),右上角坐标为(%,),点 P的坐标为(Xp,yp)你需要找到使圆能够完全覆盖矩形的最小面积,面积保留两位小数。

测试样例

样例1:

输入:x1=0,y1=0,x2=1,y2=1,xP =0,yP = 0

输出:'6.28'

样例2:

输入:x1=-2,y1=-2,x2=2,y2=2,xP=0,yP =0输出:'25.13'

样例3:

输入:x1=-3,y1=-1,x2=1,y2=2,xP =0,yP =0输出:'40.84'

解答思路
  1. 理解问题:我们需要计算一个圆的面积,这个圆的圆心在点 PP,并且能够完全覆盖矩形。这意味着圆的半径至少是点 PP 到矩形四个顶点中任意一个顶点的最远距离。
  2. 计算距离:我们使用欧几里得距离公式来计算点 PP 到矩形四个顶点的距离。对于每个顶点 (xi,yi)(x i,y i),距离 dd 可以通过公式 d=(xi−xP)2+(yi−yP)2d=(x ix P)2+(y iy P)2 计算。
  3. 确定半径:在计算出所有距离后,我们选择最大的那个距离作为圆的半径。这是因为圆需要覆盖矩形,所以半径至少是到最远顶点的距离。
  4. 计算面积:一旦我们有了半径,我们就可以计算圆的面积。圆的面积公式是 A=πr2A=π r2,其中 rr 是半径,ππ 是圆周率,这里取值为 3.1415926536。
  5. 格式化输出:最后,我们需要将计算出的面积保留两位小数,并以字符串的形式输出。
  6. 代码实现:将上述思路转化为代码,我们需要定义一个函数 solution,它接受矩形的左下角和右上角坐标以及点 PP 的坐标作为输入参数,然后返回计算出的圆的面积。
  7. 测试:最后,我们需要测试我们的函数以确保它能够正确地处理不同的输入情况,并返回预期的结果。
代码实现
import math

def solution(x1: int, y1: int, x2: int, y2: int, xP: int, yP: int) -> str:
    # 计算点P到矩形四个顶点的距离
    distances = [
        math.sqrt((x1 - xP)**2 + (y1 - yP)**2),
        math.sqrt((x2 - xP)**2 + (y1 - yP)**2),
        math.sqrt((x1 - xP)**2 + (y2 - yP)**2),
        math.sqrt((x2 - xP)**2 + (y2 - yP)**2)
    ]
    
    # 取最大距离作为半径
    radius = max(distances)
    
    # 计算圆的面积
    area = math.pi * (radius ** 2)
    
    # 保留两位小数并返回结果
    return f'{area:.2f}'

if __name__ == '__main__':
    print(solution(x1 = 0, y1 = 0, x2 = 1, y2 = 1, xP = 0, yP = 0) == '6.28')
    print(solution(x1 = -2, y1 = -2, x2 = 2, y2 = 2, xP = 0, yP = 0) == '25.13')
    print(solution(x1 = -3, y1 = -1, x2 = 1, y2 = 2, xP = 0, yP = 0) == '40.84')