首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查number1、number2和number3是否等于a、b和c,但不一定按此顺序

如何检查number1、number2和number3是否等于a、b和c,但不一定按此顺序
EN

Stack Overflow用户
提问于 2020-02-04 16:18:16
回答 3查看 613关注 0票数 6

我有一个游戏,生成三个随机数,你得猜出来。我不知道如何检查这3个数字是否与生成的数字相同。我写过这篇文章,但我知道它真的很糟糕,无法读懂。我在寻找更好的东西,但什么也没找到。有什么办法使它更好、更易读吗?

代码语言:javascript
复制
bool Guess(int number1, int number2, int number3)
{
    int guess1, guess2, guess3;

    std::cout << "Enter three numbers separated by spaces: ";

    std::cin >> guess1 >> guess2 >> guess3;

    if (guess1 == number1)
    {
        if (guess2 == number2)
        {
            if (guess3 == number3)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        else if (guess2 == number3)
        {
            if (guess3 == number2)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        else
        {
            return false;
        }
    }
    else if (guess2 == number1)
    {
        if (guess1 == number2)
        {
            if (guess3 == number3)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        else if (guess1 == number3)
        {
            if (guess3 == number2)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        else
        {
            return false;
        }
    }
    else if (guess3 == number1)
    {
        if (guess2 == number2)
        {
            if (guess1 == number3)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        else if(guess1 == number2)
        {
            if (guess2 == number3)
            {
                return true;
            }
            else
            {
                return false;
            }

        }
        else
        {
            return false;
        }
    }
    else
    {
        return false;
    }

}

下面是我如何生成这些数字的片段

代码语言:javascript
复制
int GenerateNumber(int level)
{
    if (level == 1)
    {
        return (rand() % 2) + level; // if level is one than number range is from 1 to 2
    }
    else
    {
        return (rand() % level) + level; // else number range is from level to (level * 2) - 1
    }
}

int a = GenerateNumber(level);
int b = GenerateNumber(level);
int c = GenerateNumber(level);
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-02-04 16:23:13

如果订单不重要,那么将顺序更改为便于执行的命令。为此,您可以将猜测和数字放在单独的数组中,对它们进行排序,然后进行比较。通过使用std::multiset/std::unordered_multiset为您完成所有这些工作,您可以使整个过程更加容易。看起来就像

代码语言:javascript
复制
bool Guess(int number1, int number2, int number3)
{
    int guess1, guess2, guess3;

    std::cout << "Enter three numbers separated by spaces: ";

    std::cin >> guess1 >> guess2 >> guess3;

    return std::multiset<int>{guess1, guess2, guess3} == std::multiset<int>{number1, number2, number3};
}
票数 10
EN

Stack Overflow用户

发布于 2020-02-04 16:33:51

如演示程序所示,我可以提出以下解决方案。

代码语言:javascript
复制
#include <iostream>
#include <iomanip>
#include <array>
#include <iterator>
#include <algorithm>

bool Guess( int number1, int number2, int number3 )
{
    const size_t N = 3;
    std::array<int, N> target = { number1, number2, number3 };
    std::sort( std::begin( target ), std::end( target ) );

    std::array<int, N> guess;

    std::cout << "Enter three numbers separated by spaces: ";

    std::copy_n( std::istream_iterator<int>( std::cin ), N, std::begin( guess ) );

    std::sort( std::begin( guess ), std::end( guess ) );

    return target == guess;
}

int main() 
{
    int n1 = 3, n2 = 1, n3 = 2;

    std::cout << std::boolalpha << Guess( n1, n2, n3 ) << '\n';

    return 0;
}

它的输出可能看起来像

代码语言:javascript
复制
Enter three numbers separated by spaces: 1 2 3
true

您可以使用以下语句来代替算法std::copy_n的调用pf

代码语言:javascript
复制
std::cin >> guess[0] >> guess[1] >> guess[2];
票数 4
EN

Stack Overflow用户

发布于 2020-02-04 16:33:05

我非常喜欢排序方法--但是如果您的参考数字中没有重复项,您也可以这样做:

代码语言:javascript
复制
return (number1 == guess1 || number1 == guess2 || number1 == guess3)
    && (number2 == guess1 || number2 == guess2 || number2 == guess3)
    && (number3 == guess1 || number3 == guess2 || number3 == guess3);

完全简单..。

但是,如果你有重复的话,这是行不通的,因为你会成功地猜测1,1,1和1,2,3。

编辑:当前使用的算法(问题修订版3)确实会产生重复。如果不打算改变,这个解决方案是不合适的!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60061527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档