找到输入的最大和最小值的最有效方法? (C++)
Most efficient way to find the largest and smallest values entered? (C++)
这是我使用向量的方法(注意:这远非解决此问题的最有效方法):
#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;
}
查找最大值和最小值的最有效方法是什么?
此外,考虑到输入是双精度数,有没有办法用“|”终止它?
仅供参考:问题来自编程原则与实践。我已经解决了这个问题;只是在寻找一个有效的解决方案。
是的,不用向量也可以解决。
你只需要两(三)个变量
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;
"first"的事情只是一种可能。您可以在循环之前进行单独读取(包括检查“|”),或者您可以使用 min/max 可能的双精度值,...
关于“|”:将输入读取为字符串,检查“|”,否则在检查后将其解析为双精度。
这是一个非常简单的方法。
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
的错误条件并读取任何待处理的输入).
这是我使用向量的方法(注意:这远非解决此问题的最有效方法):
#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;
}
查找最大值和最小值的最有效方法是什么?
此外,考虑到输入是双精度数,有没有办法用“|”终止它?
仅供参考:问题来自编程原则与实践。我已经解决了这个问题;只是在寻找一个有效的解决方案。
是的,不用向量也可以解决。
你只需要两(三)个变量
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;
"first"的事情只是一种可能。您可以在循环之前进行单独读取(包括检查“|”),或者您可以使用 min/max 可能的双精度值,...
关于“|”:将输入读取为字符串,检查“|”,否则在检查后将其解析为双精度。
这是一个非常简单的方法。
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
的错误条件并读取任何待处理的输入).