离开一个数组值后如何获得最大值?

时间:2015-09-12 03:42:09

标签: c++ arrays algorithm

我目前在从数组中获取最大值时遇到问题,这是我的代码:

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;


int main() {
    int a[10],max=0,j,secondbig=0;
    for(int i=0;i<10;i++)
        {
        cin>>a[i];

    }
    max = a[0];
    for(int i=0;i<10;i++)
        {
        if(a[i]>max){
            max=a[i];
            j=i;
        }
    }
    secondbig=a[10-j-1];
    for(int i=0;i<10;i++)
        {
        if(secondbig <a[i] && j != i)
          secondbig =a[i];
    }
    cout<<max<<"\n"<<secondbig;
    return 0;
}

我想要做的是首先从数组中获取最大值,然后保留一个数组值,然后获得第二大值,第三大值相同,例如:

200
100
50
300
400
500
600
700
800
900

如果上述测试值900是最大值,那么随后的第二和第三大值应该是700和500,那么还有吗?

4 个答案:

答案 0 :(得分:0)

也许你可以对数组进行排序

int *pbeg = begin(a);
int *pend = end(a);
sort(pbeg, pend);

这将使用运算符&lt;对[pbeg,pend]范围内的所有元素进行排序, 或使用二元谓词

对所有元素进行排序

答案 1 :(得分:0)

鉴于你的原始代码,我认为这是你所尝试的风格。它将回归三个最高的vaule。请注意,您只需要创建一个循环来重复初始计算。您希望最大剩余值小于先前的最大值。

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#include <limits>
using namespace std;


int main()
{
    int a[10], max, prior_max = numeric_limits<int>::max();
    for(int i=0;i<10;i++)
        {
        cin>>a[i];

    }
  for( int j = 0; j<3; j++){
    max = numeric_limits<int>::min();
    for(int i=0;i<10;i++)
        {
        if(a[i]>max && a[i]<prior_max){
            max=a[i];
        }
    }
    cout << max << endl;
    prior_max = max;

  }
  return 0;
}

答案 2 :(得分:0)

假设您很乐意获得价值,我会使用矢量。

std::sort(std::begin(a), std::end(a), std::greater<int>());

然后打印或复制数组的第一个n元素(假设n不超过数组大小10)。它们将以相反的顺序排列,但可以很容易地纠正。

答案 3 :(得分:0)

根据您的后续问题,如果要列出所有最大值,请将j <3更改为j <10。如果您想要从数组中提取的最大值的数字和,则需要再添加一个变量:

int a[10], total, max, prior_max = numeric_limits<int>::max();

然后在外部循环中,放置在内部循环的末尾这个语句:

total += max;

然后在循环执行完成后,您可以打印出总数或以其他方式使用它。如:

cout << 'Total: ' << total << endl;