2016-11-02 3 views
0

enter image description here最大と配列C++

で二番目に大きい数Iは、アレイ内の最大と二番目に大きい要素を見つけるためのC++のコードを書かれています。コードは正常に動作しますが、問題は2番目に大きい番号の場所が更新されていないことです。 2番目に大きい番号の値は正しいが、その位置が正しくない。

#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(); 
} 
+0

'DATA [I]> largestNumber'あなたは' LOC2 = LOC1を追加する必要があります; '' LOC1は= i'前に:あなたは 'secondLargestNumber'を割り当てるたびに、あなたは' loc2'を割り当てる必要があります。 – Franck

+0

値を保持する必要はありませんが、位置は十分です。これによりコードが大幅に簡素化されます – Slava

答えて

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; 
} 
+0

あなたのコードにはUBが可能ですが、値は一意ではありません。 OPのコードとは異なる結果になることがあります。 OPのコードが正しいかどうかは明らかではないが。 – Slava

+0

@Slava簡単な交換http://en.cppreference.com/w/cpp/container/multiset – mkmostafa

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); 
    } 
} 
0

使用「LOC2 = LOC1」ステートメントをブロックは、私はそれがうまくいくと思うなら、このコードをチェックします、場合

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; 
    } 
}