数组C ++中最大和第二大的数字

时间:2016-11-02 19:34:19

标签: c++ arrays

enter image description here

我用C ++编写了一个代码,用于查找数组中的最大和第二大元素。代码工作正常但问题是第二大数字的位置未更新。虽然第二大数字的值是正确的,但其位置不正确。

    #include<iostream>
using namespace std;
void main()
{
    int DATA[10];
    int largestNumber, secondLargestNumber, loc1, loc2;
    cout << "Enter 10 numbers of array DATA" << endl;
    for (int i = 0; i < 10; i++)
    {
        cin >> DATA[i];
    }
    largestNumber = DATA[1];
    secondLargestNumber = DATA[2];
    loc1 = 1;
    loc2 = 2;
    if (largestNumber < secondLargestNumber)
    {
        largestNumber = DATA[2];
        secondLargestNumber = DATA[1];
    }
    for (int i = 2; i < 10; i++)
    {
        if (DATA[i]>largestNumber)
        {
            secondLargestNumber = largestNumber;
            largestNumber = DATA[i];
            loc1 = i;

        }
        else if (DATA[i]>secondLargestNumber)
        {
            secondLargestNumber = DATA[i];
            loc2 = i;
        }
    }
    cout << "Largest Number with location   :"<<largestNumber<<"    "<<loc1 << endl;
    cout << "Second Largest Number location     :" << secondLargestNumber<<"    "<<loc2 << endl;
    cin.get();
    cin.get();
}

3 个答案:

答案 0 :(得分:2)

我可以建议一个更简单的解决方案吗?

#include <functional>
#include <set>
#include <iostream>

int main() {
  std::set<int, std::greater<int>> s;
  int input;
  while(true) { // choose your stopping condition
    cin >> input;
    s.insert(input);
  }
  std::cout << (*s.begin()) << (*std::next(s.begin())) << std::endl;
}

答案 1 :(得分:0)

如果你只保留位置而不是值,那么你的代码可以大大简化:

 int largest = 0, second = -1;

 for (int i = 1; i < 10; i++) {
    if( second == -1 || DATA[i] > DATA[second] ) {
        second = i;
        if( DATA[second] > DATA[largest] )
            std::swap( largest, second );
    }
 }

答案 2 :(得分:0)

使用&#34; loc2 = loc1&#34;首先,如果块我认为它将起作用,请检查此代码,

for (int i = 2; i < 10; i++)
{
    if (DATA[i]>largestNumber)
    {
        secondLargestNumber = largestNumber;
        loc2=loc1;
        largestNumber = DATA[i];
        loc1 = i;

    }
    else if (DATA[i]>secondLargestNumber)
    {
        secondLargestNumber = DATA[i];
        loc2 = i;
    }
}