我应该在数组中找到最小值和最大值,但我似乎无法弄清楚为什么答案不正确。例如,如果我输入“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;
}
}
答案 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正则表达式尚未运行。