我正在试图找出一个代码,可以确定输入的一组数字的最大数字,最小数字,第二大数字和第二小数字。这是我的代码。我遇到的问题主要是由于变量的初始化。我很感激任何帮助!
我的代码:
#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;
int main(){
string buffer;
unsigned n;
double min = 1, max = 0;
double min2 = 1, max2 = 5;
cout << "How many integers will you enter? ";
cin >> n || die("Input failure ");
cout << "OK type the " << n << " integers, non #'s to quit: ";
for (unsigned count = 0; count < n; count++){
double num;
cin >> num;
if (min > num){
min = num;
}
else if (max < num){
max = num;
}
else if (num >= max2 && num <= max){
max2 = num;
}
else if (num >= min2 && num <= min ){
min2 = num;
}
} cout << "The largest number is: " << max << endl;
cout << "The smallest number is: " << min << endl;
cout << "The second smallest number is: " << min2 << endl;
cout << "The second largest number is: " << max2 << endl;
cin >> buffer;
}
答案 0 :(得分:0)
我建议采用略有不同的方法。
C ++有许多数据结构,例如std::set
,std::map
和std::vector
,它们对不同的场景非常有用。例如,如果您知道您的值是唯一的,则可以将它们全部放在std::set
中,这样可以按大小顺序保存值。然后,取前两个和后两个将给出最高和最低值。如果你的值不是唯一的,你可以将它们全部放在std::vector
中,对矢量进行排序,然后做同样的事情:取前两个和最后两个元素。
这是我的意思的一个例子,使用std::set
- 我还没有测试过这个,但是如果你决定采用这种方法,它应该让你开始。
#import <set>
int main() {
std::set<double> mySet;
mySet.insert(0.0);
mySet.insert(100.0);
mySet.insert(10.0);
mySet.insert(90.0);
mySet.insert(20.0);
mySet.insert(80.0);
double min = *(mySet.begin());
double min2 = *(mySet.begin()+1);
double max = *(mySet.end()-1);
double max2 = *(mySet.end()-2);
return 0;
}
希望有所帮助!
答案 1 :(得分:0)
我遇到的问题主要是由于变量的初始化。
如果您希望将变量初始化为double的限制(例如 min 和 min2 可以初始化为double的最大限制,反之亦然< em> max 和 max2 )看看这个minimum double value in C/C++。
答案 2 :(得分:0)
只需将所有值读入std:vector<double>
,然后对该矢量进行排序。
前两个值将是两个最小值。最后两个将是最大的两个。
您需要决定如何处理重复输入。例如,如果多次输入相同的值。