找到输入的最大和最小值的最有效方法是什么? (C ++)

时间:2015-12-16 02:44:32

标签: c++ comparison

以下是我使用向量的方法(注意:这远不是解决此问题的最有效方法):

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int main(int argc, char** argv) {

    vector<double>n;

    double val = 0;

    bool turkey = true;

    cout << "Please enter a positive number (max. 1,000,000)" << '\n';

    while(turkey){
        cin >> val;
        if (val >= 0 && val <= 1000000){

            n.push_back(val);

            sort(n.begin(), n.end());

            cout << n[0] << " is the smallest value so far" << '\n';
            cout << n[n.size()-1] << " is the largest value so far" << '\n';

        }
        else {
            turkey = false;
        }
    }
    return 0;
}

查找最大值和最小值的最有效方法是什么?

另外,有没有办法用'|'来终止它,考虑到输入是双倍的?

仅供参考:问题来自编程原则&amp;实践。我已经解决了这个问题;只是寻找有效的解决方案。

2 个答案:

答案 0 :(得分:2)

这是一个非常简单的方法。

double value, minimum = -1.0, maximum = -2.0;  // note initialisation maximum < minimum
bool valid_input;

do
{
     std::cout << "Please enter a positive number (max. 1,000,000)" << '\n';
     if (!!(valid_input = ((std::cin >> value) && (value > 0.0 && value < 1E6))))
     {
         if (maximum < minimum)
             minimum = maximum = value;
         else if (value < minimum)
             minimum = value;
         else if (value > maximum)
             maximum = value;
     }
}
while (valid_input);

这方面的一个特点是value上的范围检查是可选的。所有用户需要做的是输入一个非数字非白色字符(然后输入),他们可以强制循环退出(尽管后续代码需要清除std::cin的错误条件并读取任何待处理的输入)。

答案 1 :(得分:1)

是的,它可以在没有载体的情况下解决 您只需要两(3)个变量

double min, max;  
bool first = true;  

然后

while(turkey) { //turkey?
    cin >> val;
    if(first)
    {
        first = false;
        min = val;
        max = val;
    }
    if(val < min) min = val;
    if(val > max) max = val;

&#34;第一&#34;只有一种可能性。您可以在循环之前单独读取(包括检查&#34; |&#34;),或者您可以使用最小/最大可能的双值,...

关于&#34; |&#34;:将输入作为字符串读取,检查&#34; |&#34;,否则在此检查后将其解析为双。< / p>