我有一个游戏,生成三个随机数,你得猜出来。我不知道如何检查这3个数字是否与生成的数字相同。我写过这篇文章,但我知道它真的很糟糕,无法读懂。我在寻找更好的东西,但什么也没找到。有什么办法使它更好、更易读吗?
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);发布于 2020-02-04 16:23:13
如果订单不重要,那么将顺序更改为便于执行的命令。为此,您可以将猜测和数字放在单独的数组中,对它们进行排序,然后进行比较。通过使用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};
}发布于 2020-02-04 16:33:51
如演示程序所示,我可以提出以下解决方案。
#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;
}它的输出可能看起来像
Enter three numbers separated by spaces: 1 2 3
true您可以使用以下语句来代替算法std::copy_n的调用pf
std::cin >> guess[0] >> guess[1] >> guess[2];发布于 2020-02-04 16:33:05
我非常喜欢排序方法--但是如果您的参考数字中没有重复项,您也可以这样做:
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)确实会产生重复。如果不打算改变,这个解决方案是不合适的!
https://stackoverflow.com/questions/60061527
复制相似问题