有一个宽为W高为H的棋盘,在棋盘上有一个特殊点P,位置未知,你当前在棋盘上的位置为(x0,y0),你每移动一次系统会给你一个string类型的提示词,colder表示你离P的距离变远了,warmer表示你离P点更近了,same表示你离P点的

动态 未结 0 97
小小草
小小草 LV1 2023年9月23日 23:40 发表
这是一个典型的二分搜索问题,我们可以通过不断缩小搜索范围来逼近P点。 具体实现如下: 1. 初始化左右边界为(0,0)和(W,H),表示P点可能在整个棋盘内。 2. 每次根据提示词更新左右边界,缩小搜索范围。如果提示词为colder,则说明离P点更远了,因此需要将左边界或上边界更新为当前位置;如果提示词为warmer,则说明离P点更近了,因此需要将右边界或下边界更新为当前位置。 3. 根据更新后的左右边界计算出中心点的坐标,并移动到该点。 4. 重复步骤2和3,直到找到P点。 代码如下: ``` W, H = map(int, input().split()) x, y = W // 2, H // 2 # 初始位置为棋盘中心 dx, dy = 0, 0 # 上一次移动的方向 while True: print(x, y) s = input() if s == 'found': break if s == 'colder': if dx == 0: # 上一次移动水平方向 if x < W // 2: W, x = x, (x + dx) // 2 else: x, W = (x + dx) // 2, x else: # 上一次移动垂直方向 if y < H // 2: H, y = y, (y + dy) // 2 else: y, H = (y + dy) // 2, y elif s == 'warmer': dx, dy = x - dx, y - dy # 记录上一次移动的方向 x, y = (x + dx) // 2, (y + dy) // 2 # 移动
收藏(0)  分享
相关标签: 智能问答
问题没解决?让AI助手帮你作答 AI助手
0个回复
  • 消灭零回复