C ++如何检查对象是否等于数组中的任何值?

时间:2017-04-09 21:35:32

标签: c++ arrays

我正在尝试创建一个用户输入数字的简单游戏,并且计算机会尝试猜测它。该程序随机生成1到1之间的数字。 100.每当用户说数字太高时,它就会存储该值,并且高于该值的每个值都存储在数组中,反之亦然。然后我希望程序生成另一个随机数,但如果它生成的数字在错误数字的数组内,它会再次尝试。但我完全不知道如何检查数组中是否存在数字。这可能吗?

2 个答案:

答案 0 :(得分:0)

是的,这是可能的。您将需要使用std :: find()算法,可以找到Here的参考页面。

它被称为std :: find(std :: begin(array),std :: end(array),someObject); 并将迭代器返回到[first,last]范围内的第一个元素,该元素与someObject进行比较。如果没有找到这样的元素,函数将返回最后一个元素,即范围结束。

在构建随机数游戏时,我会考虑是否检查计算机是否超出范围然后再次猜测是否是解决问题的最佳方法(因为它不是最好的方法)

在提出问题之前,请先尝试查找类似问题,例如ThisThis,然后再提出新问题,以防止堆叠溢出过于混乱

答案 1 :(得分:0)

对于那个游戏,你不需要阵列。看看下面的程序:

#include <iostream>

constexpr long long average (long long a, long long b)
{
    return (a+b)>>1;
}

int main()
{
    char ans;
    long long start, end;
    std::cin >> start >> end;
    do
    {
        auto n=average(start,end);
        std::cout << n << std::endl;
        std::cin >> ans;
        if(ans=='<') end=n-1;
        else if(ans=='>') start=n+1;
    }
    while(ans!='=');
}

想想[start,end]范围内的数字,程序会猜到它。 它使用二进制搜索算法,因此在最坏的情况下需要大约log2(end-start + 1)尝试。