繁体   English   中英

使用二分搜索的猜谜游戏

Guessing Game using Binary search

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在尝试使用二分搜索制作猜谜游戏

这是我的代码:

import random

def guess():
a = 0
b = 100
c = random.randint(1,100)
count = 1

user = int(input("Guess a number from 1 to 100: "))
comp = int(input(f"\nIs ur number {c}\nIf its high write 0 \nIf its low write 2\nIf it is then write 1: "))

while comp != 1:
count += 1

if comp == 0:
  c = (a + c) // 2

elif comp == 2:
  c = (c + b) // 2

comp = int(input(f"\nIs ur number {c} \nif its high press 0 \nif its low press 2\nif its ur number press 1: "))

print(f"\nYour number was {user} and it took {count} turn to find ur number.")

guess()

我面临的问题是二分搜索

例如:

assuiming our guess number is  = 55

our random number genrated = 22

user will press 2 cause it low resulting a number = (22 + 100) // 2
                                                  = 61  
since 61 in higher than 55

# here lies the problem in the 2nd loop
user will press 1 cause its high resulting a number = (0 + 61) // 2
                                                    = 30

它找到了我不想要的从 0 到 61 的中间数字

我想要的是找到 22 的中间数字,如下所示:

(22 + 61) // 2 导致它给我们 41

then (41 + 61) // 2 导致它打印 51

then (51 + 61) // 2 导致它打印 56

then (56 + 51 ) // 2 导致它打印 53

then (53 + 56 ) // 2 导致它打印 54

then (54 + 56 ) // 2 导致它打印 55

55 这是我们的猜测数字

1 个回复

我对您的函数进行了以下修改,以缩小itprorh66建议的研究间隔。 代码如下:

def guess():
    a = 0
    b = 100
    c = random.randint(1,100)
    count = 1
    
    user = int(input("Guess a number from 1 to 100: "))
    comp = int(input(f"\nIs ur number {c}\nIf its high write 0 \nIf its low write 2\nIf it is then write 1: "))
    
    while comp != 1:
        count += 1
    
        if comp == 0:
            b=c
            c = (a + c) // 2
          
        
        elif comp == 2:
            a=c
            c = (c + b) // 2
        comp = int(input(f"\nIs ur number {c} \nif its high press 0 \nif its low press 2\nif its ur number press 1: "))

    print(f"\nYour number was {user} and it took {count} turn to find ur number.")
1 使用向量进行二分搜索

所以..我已经了解了二分搜索及其工作原理,甚至在没有用户任何输入的情况下使用常量数组进行了尝试,但现在我尝试应用向量而不是数组来让用户输入两个列表的值从向量中搜索数字和要搜索的目标。 在这里,我在使用数组时使用了普通的分治法 我的问题是我使用 vector 做了几乎相同的方法,但它显示了无限量的 ...

2 如何使用递归创建二分搜索

我正在尝试编写一个我以前从未做过的“二进制搜索”。 当搜索的值是 6 或 2 时,下面的代码不起作用,我想知道我做错了什么以及如何纠正它。 编辑 为了解释它应该做什么(根据我的理解),二进制搜索要求数组已经排序,然后查找数组的中点索引。 例如,如果数组有九个索引 (0-8),则中点将为索引 4。 ...

3 链表上的二分搜索(使用递归)

我已经实现了一个程序来检查给定的数字是否存在于链表中,但是我在执行过程中遇到了问题; 当我输入列表中不存在的某个值时,什么也没有出现,在我看来,我的程序陷入了无限循环。 谁能帮我改进我的算法? 提前致谢! 你可以在这里检查整个代码: https : //github.com/mmed17/Binar ...

4 使用矩阵进行二分搜索

我有一个矩阵:矩阵的图片 我需要用二进制搜索来计算矩阵上有多少个大写字母。 这是我的代码: 程序在第一个 If 语句中崩溃。 错误截图 我究竟做错了什么? ...

5 实现二分搜索猜谜游戏[关闭]

我正在尝试编写一个程序,计算机在该程序中尝试猜测用户选择的数字(1-100)。 我已经编写了大部分程序,还制作了一个随机数生成器。 我现在唯一需要的是一种基于用户的HIGH或LOW输入将二进制搜索算法实现到程序中的方法。 我已经阅读了一些有关二进制搜索算法的信息,但是不确定如何在程序中使用 ...

6 二分搜索练习

我正在用C进行练习,但是我不知道为什么我总是总是-1(这是不可能的)。 交换坐标数组后,我只有-1。 现在我必须使用srand(time(NULL))我知道有更好的解决方案。 练习尚未完成,现在我正在尝试解决此错误,有人可以帮助我吗? 编辑:我正在使用OPENVMS进行编译,链 ...

2013-01-11 16:04:20 1 164   c/ openvms
7 我们可以使用地图进行搜索而不是二分搜索吗?

映射提供 O(1) 查找。 我们不能一次遍历数组并构建与其索引相对应的映射(与数组相反),当我们想要搜索某些东西时,我们可以调用map[VALUE]并且它会返回索引。 它可能不适用于数组中的大值,但假设a[i]<10^5 ,我们不能这样做而不是二进制搜索吗? 然后,每个查询将是 O(1)。 ...

10 使用二分搜索实现平方根

好的,所以我已经研究了一段时间,我知道我的逻辑是正确的,但是,我似乎无法产生正数的正确平方根。 例如,我失败的一个测试用例是x = 2 :它应该返回 1 但我返回 2。这没有意义,因为我显然先取了一个中点。 向左或向右的逻辑是错误的吗? ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM