查找五次数组中的最大值和最小值

时间:2013-11-01 03:45:47

标签: arrays input max average min

我应该在数组中找到最小值和最大值,但我似乎无法弄清楚为什么答案不正确。例如,如果我输入“1 2 3 4 5”作为我的五次,它告诉我1是我的最大值,0是最小值。出于某种原因,无论第一个数字是什么,它都将其称为最大值,并且还将0指定为最小值。

#include <iostream>
using namespace std;

int find_distance(int j); //a function that returns a distance based on the choice j
int intmax, intmin;
int main( )
{

int i =0;
int distance[6]; 
double data[6][5]; 
for(int j = 0; j < 6; j++)
{
    distance[j] = find_distance(j);
    cout << "\nEnter 5 of your best running times for \n " << distance[j] << " m \n";
    for(int i = 0; i < 5; i++)
    {
        cout << "Enter a time \n"; cin >> data[j][i];
    }

}
cout << "Here is your best 5 times: ";
for(int j = 0; j < 6; j++)
{
cout << "\nDistance : " << distance[j] << " m \n";

for(int i = 0; i < 5; i++)
{
    system ("pause");
    cout << data[j][i] << "\t"; } cout << endl;

    if (data[j][i] < intmin) 
    intmin = data[j][i]; 
    else if (data[j][i] > intmax) 
    intmax = data[j][i]; 

    cout << "The maximum time is: " << intmax << endl;
    cout << "The minimum time is: "<< intmin << endl;
}
return 0;
}
int find_distance(int j)
{
switch (j)
{ case 0: // 100 meter 
return 100;
break;
case 1: // 150 meter 
return 150;
break;
case 2: // 200 meter 
return 200;
break;
case 3: // 400 meter 
return 400;
break;
case 4: // 500 meter 
return 800;
break;
default: // 1600 meter
    return 1600;
    }
}

2 个答案:

答案 0 :(得分:0)

最小值为0,因为初始化intmin时,默认设置为0。您永远不会输入负时间,因此在您的比较中,它总是小于比较值。
最大值为off,因为for循环在奇数位置结束且比较代码未正确执行。更改此代码:

for(int j = 0; j < 6; j++)
{
  cout << "\nDistance : " << distance[j] << " m \n";

for(int i = 0; i < 5; i++)
{
system ("pause");
cout << data[j][i] << "\t"; } cout << endl; //why does the for loop end here?

if (data[j][i] < intmin) 
intmin = data[j][i]; 
else if (data[j][i] > intmax) 
intmax = data[j][i]; 

            //move the end bracket to this line and it should work

cout << "The maximum time is: " << intmax << endl;
cout << "The minimum time is: "<< intmin << endl;
}

答案 1 :(得分:0)

练习:

#include <iostream>
#include <algorithm>
#include <string>
#include <boost/regex.hpp>

int main () {
  using namespace std;

  string input;
  boost::regex re("-?\\d+");
  vector<int> integers;

  cout << "enter sequence of integers: ";
  getline(cin, input);

  boost::sregex_token_iterator begin(input.begin(), input.end(), re, 0);
  boost::sregex_token_iterator end;
  while (begin != end) {
    integers.push_back(stoi(*begin));
    ++begin;
  }

  if (integers.size()) {
    auto pair = minmax_element(integers.begin(), integers.end());
    cout << "min: " << *pair.first << " max: " << *pair.second << endl;
  } else {
    cout << "you didn't enter any integers." << endl;
  }
  return 0;
}

这是编译和运行的方法:

$ g++ -o lab_2 -std=c++11 -lboost_regex lab_2.cpp
$ ./lab_2 
$ enter sequence of integers: -10 34 75 101 2 43
$ min: -10 max: 101

需要安装boost,因为STL正则表达式尚未运行。