我无法显示包含最大整数值的索引。但我可以在数组中显示整数的最大值

时间:2017-08-22 21:23:22

标签: c++ arrays algorithm max

我无法显示包含最大整数值的索引。但我可以在数组中显示整数的最大值。 这是我的代码:

#include <iostream>
#include<stdlib.h>
using namespace std;

int main () {

    int a[10], highest,temp = 0;
    do{

        cout<<"Enter 10 Numbers: ";
        cin>>a[temp];
        temp++;
    }while(temp !=10);

    for(int j = 0; j <10; j++){
        if(a[0]<a[j]){
            highest = j;

        }
    }   

    for(int x = 0; x <10; x++){
        if(a[0]<a[x]){
            a[0] = a[x];
        }
    }
    cout<<"The highest number is "<<a[0] <<" at index "<<highest<<endl; 
    system("pause");
    return 0;
}

3 个答案:

答案 0 :(得分:1)

对于初学者,请不要使用魔术数字,例如程序中的数字10。改为使用命名常量。

还将变量声明为使用它们的最小范围。

此循环

for(int j = 0; j <10; j++){
if(a[0]<a[j]){
highest = j;

}

没有意义,因为它搜索数组中大于元素a[0]的最后一个元素。它与搜索最大元素的索引不同。

同样,由于变量highest未初始化,因此通常程序具有未定义的行为。

您可以使用一个查找最大元素索引的循环来代替两个循环。

这是一个演示程序,展示了如何完成它。

#include <iostream>

int main() 
{
    const size_t N = 10;
    int a[N];

    std::cout << "Enter " << N << " umbers: ";

    for ( size_t i = 0; i < N; i++ ) std::cin >> a[i];

    size_t max = 0;

    for ( size_t i = 1; i < N; i++ )
    {
        if ( a[max] < a[i] ) max = i;
    }

    std::cout << "The highest number is " << a[max] 
              << " at index " << max << std::endl; 

    return 0;
}

它的输出可能看起来像

Enter 10 umbers: 7 2 3 0 9 1 8 6 4 5
The highest number is 9 at index 4

考虑到标头std::max_element中声明的标准算法<algorithm>,它在序列中找到最大元素并返回迭代器/指针。

例如

#include <iostream>
#include <algorithm>
#include <iterator>

int main() 
{
    const size_t N = 10;
    int a[N];

    std::cout << "Enter " << N << " umbers: ";

    for ( size_t i = 0; i < N; i++ ) std::cin >> a[i];

    int *max_value = std::max_element( a, a + N );

    std::cout << "The highest number is " << *max_value 
              << " at index " << std::distance( a, max_value ) << std::endl; 

    return 0;
}

程序输出可能如上所示

Enter 10 umbers: 7 2 3 0 9 1 8 6 4 5
The highest number is 9 at index 4

答案 1 :(得分:0)

只要您在[0]中存储最高值,您需要将其与新的更大值交换,如果在每次迭代后找到,程序中的一些代码应如下所示:

 for(int j = 0; j <10; j++){
    if(a[0]<a[j]){
        int tmp = a[0];
        a[0] = a[j];
        a[j] = tmp;
        highest = j;
    }
} 
  • 一个简单易读的例子如下:

    int a[10], highest = -1, highestIndex = -1;
    
    for(int i(0); i < 10; i++){
        cout<<"a[" << i << "]: ";
        cin >> a[i];
    }
    
    
    for(int i = 0; i < 10; i++){
        if(a[i] > highest){
            highest = a[i];
            highestIndex = i;
        }
    }   
    
    cout << "The highest number is " << highest << " at index " << highestIndex << endl;
    
  • 请不要问while-do loop你可以处理它。

答案 2 :(得分:0)

代码的第一部分检测到大于第一个元素的元素的最高索引,而不是具有最高值的元素的最高索引:

for(int j = 0; j <10; j++){
  if(a[0]<a[j]){
    highest = j;
  }
}   

这是因为你总是比较a[0](不会改变),而不是到目前为止达到的最高值。 相反,第二个循环用于找到最高值,因为您将a[0]更改为&#34; local&#34;到目前为止发现的最大值。

for(int x = 0; x <10; x++){
  if(a[0]<a[x]){
    a[0] = a[x];  // remembers the maximum found so far for further comparisons
  }
}

您可以轻松地将两者结合如下。请注意(作为次要事项)从1开始就足够了

int indexOfMax = 0;
for(int x = 1; x <10; x++){
  if(a[0]<a[x]){
    a[0] = a[x];  // remembers the maximum found so far for further comparisons
    indexOfMax = x;  // stores the index of this element.
  }
}