c++ - 如何检查 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);
解决方案
如果顺序无关紧要,则将顺序更改为易于执行的顺序。为此,您可以将猜测和数字放在单独的数组中,对它们进行排序,然后进行比较。您可以使用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};
}
推荐阅读
- javascript - 在提交时保持价值
- applescript - 如何在 Apple Mail Rule 上触发 AppleScript?
- sql-server - SQL Server GROUP BY 但需要一个详细信息列
- php - 每个 TCP 连接上的误报 SYN 泛洪检测
- c# - 为什么 JsonSerializer 给空?
- node.js - FFMPEG 和 Node.js Spawn 不输出任何内容
- r - 在 R data.frame 中查找常量列的名称
- r - 当`Esc`在R中不起作用时如何停止运行函数?
- c# - 使用特定命名空间前缀的所有节点的 XPath 查询
- javascript - 有没有一种简洁的方式来查看网站的 JavaScript?