这是一个简单的入门类(class)问题。我必须编写一个程序,要求用户输入3个数字,并确定最大和最小数字。
我只需要使用if语句。
这就是我到目前为止所尝试的:需要进行4次比较。

int x, y, z;
int smallest, largest;
cout << "Please enter 3 numbers to compare: " ;
cin >> x >> y >> z;

smallest = x;
largest = x;

if (y > largest)
        largest = y;
if (z > largest)
        largest = z;
if (y < smallest)
        smallest = y;
if (z < smallest)
        smallest = z;

cout << "largest: " << largest << ", and smallest: " << smallest << endl;
我的问题是:是否可以仅使用3个或更少的比较?我认为当y > largest时,它还告诉我们其他内容吗?

最佳答案

您的代码的问题在于您会浪费很多信息。在诸如此类的“挑战”中,您必须充分利用已有的东西。所以当你说,例如

if (y > largest)

不要只对待true大小写。还应尝试对条件不成立的情况进行推理。
if ( x < y )
{
    smallest = x;
    biggest = y;
}
else
{
    smallest = y;
    biggest = x;
}

if ( z < smallest )
   smallest = z;
else if ( z > biggest )
   biggest = z;

这仅包含3个比较。

关于c++ - 如何以最少的比较获得3个值中的最大值和最小值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16743782/

10-13 07:01