首页 > 解决方案 > 如何检查 number1、number2 和 number3 是否等于 a、b 和 c 但不一定按此顺序

问题描述

我有一个生成三个随机数的游戏,你必须猜出它们。我不知道如何检查这三个数字是否与生成的相同。我已经写了这个,但我知道它真的很糟糕而且不可读。我寻找更好的东西,但没有找到任何东西。有什么方法可以让它更好、更易读吗?

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;
    }

}

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

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);

标签: c++

解决方案


如果顺序无关紧要,则将顺序更改为易于执行的顺序。为此,您可以将猜测和数字放在单独的数组中,对它们进行排序,然后进行比较。您可以使用std::multiset/std::unordered_multiset来为您完成所有这些工作,从而使整个过程更加轻松。那看起来像

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};
}

推荐阅读