显示线性搜索的最大值和最小值

时间:2018-03-13 20:44:09

标签: c++

我决定在C ++中练习CodeAbbey练习。我正在研究问题#15(最大值或数组),它告诉我:在数组(大小为300)上创建线性搜索,找到列表中的最大值和最小值,然后打印出最大值和最小值

似乎我得到了一切但是显示了分钟,我想知道你们是否能指出我正确的方向。

到目前为止,这是我的代码:

#include <iostream>
using std::cout;
using std::cin;

int main() {
   int arrayLength[300];

   cout << "Please enter the numbers you would like to perform a linear search in: \n";
   for(int i=0; i<=300; i++) {
       cin >> arrayLength[i];
   }

    //Store the current maximum in a separate variable
    int max=arrayLength[0];
    int min=arrayLength[0];

   for(int i=0; i<=300; i++) {
       if(arrayLength[i] > max) {
           max = arrayLength[i];
       } else if(arrayLength[i] < min) {
           min = arrayLength[i];
       }
   }

   cout << "\n" << max;
   cout << "\n" << min;

   return 0;
}

现在,当我运行它时,代码会执行并打印最大数字而不是最小数字。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

for(int i=0; i<=300; i++)看起来不正确。您的数组int arrayLength[300]包含300个整数。如果您从1到300计数有300个数字,您的循环计数从0到300,这是301个数字。

长度n数组的最高索引实际上是n-1,因为第一个数组索引是0。

int arr[3];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
arr[3] = 4; // arr holds 3 ints not 4!

此外,打印值的代码可能与您期望的完全不同。

cout << "\n" << max;
cout << "\n" << min;

如果我们绘制\n以显示我们新线的位置

\n
MAX\n
MINotherstuffblahblah

将代码更改为

cout << max << "\n";
cout << min << "\n";

结果

MAX\n
MIN\n
otherstuffblahblah

让您更容易看到最低价值。

答案 1 :(得分:1)

<=更改为<。大小为300的数组的数组索引从0到299运行。当我运行它时,min是正确的,但最大值是错误的。当您索引越界时,结果是不可预测的。 &#34;未定义的行为&#34;它被称为。