2013-11-01 192 views
0

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

你为什么不排序值并找到第一个和最后一个元素? – nitinsh99

+0

@ nitinsh99因为这会使它O(log n)而不是O(n)?可能在很短阵列的情况下,这并不重要,但是我在这里感觉到了作业,并且可能OP应该提供比给定的更通用的解决方案。 – 2013-11-01 07:16:34

+0

[在数组中找到最大和最小数字]的可能重复(http://stackoverflow.com/questions/16298906/find-largest-and-smallest-number-in-an-array) – Torben

回答

0

最小值为0,因为当初始化intmin时,它默认设置为0。你永远不会输入负面的时间,所以在比较中,它总是小于比较值。
由于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; 
} 
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 

需要安装升压因为STL正则表达式是不实用而不失。

相关问题