C ++循环,输入最大/最小数字

时间:2015-07-26 08:45:19

标签: c++ loops for-loop while-loop

我正在试图找出一个代码,可以确定输入的一组数字的最大数字,最小数字,第二大数字和第二小数字。这是我的代码。我遇到的问题主要是由于变量的初始化。我很感激任何帮助!

我的代码:

#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;
}

3 个答案:

答案 0 :(得分:0)

我建议采用略有不同的方法。

C ++有许多数据结构,例如std::setstd::mapstd::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>,然后对该矢量进行排序。

前两个值将是两个最小值。最后两个将是最大的两个。

您需要决定如何处理重复输入。例如,如果多次输入相同的值。