以下是我使用向量的方法(注意:这远不是解决此问题的最有效方法):
#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;实践。我已经解决了这个问题;只是寻找有效的解决方案。
答案 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>