-2

私はこのアプローチを使用しています:最初に5つの数字の中で最大のものを見つけてから、最大の数字を表示した後、最大の数字の配列の添え字を「ivariable」に保存し
array[ivariable] = 0 ; ます。配列で。もう一度同じことをして、最大のものを見つけますが、私がしようとしていることは得られません。論理エラーです。ありがとう

#include <iostream>
using namespace std;
int main(void)
{
    int counter, large,number,det_2, i , large3, det_3= 0;
    int det[5] = {0,0,0,0,0};

    for(int k(0); k < 5 ; k++)
    {
        cout << "Enter the number  " << endl ;
        cin >> det[k] ;
    }

    for( i; i<5; i++)
    {
        large = det[i] ;
        if (large > det_2)
        {
            det_2= large ;
            counter = i ;
        }
        else 
        {

        }
    }
    cout << "Largest among all is  " << det_2 << endl;
    det[i] = 0 ;

    for( int j(0); j<5; j++)
    {
        large3 = det[j] ;
        if(large3 > det_3)
        {
            det_3= large3 ;                  
        }
        else 
        {

        }
    }
    cout << "Second largest  " << large3 << endl ;

    system("PAUSE");
}
4

6 に答える 6

1

変数を使用する前に、必ず変数の値を指定してください

det_2 = det[0];
counter = 0;
for (i = 1; i < 5; i++)
于 2013-10-03T14:38:06.473 に答える
0

5 つの要素の特定のケースでは、使用するアルゴリズムが実際の違いを生む可能性はほとんどありません。

とはいえ、この種のジョブ用に特別に設計された標準アルゴリズムはstd::nth_element.

コレクション全体を並べ替えた場合に位置 N になる要素 (重複がある場合は "an") を見つけることができます。

それは名前からも明らかです。それほど明白ではない (しかし、それでも必要な) ことnth_elementは、要素を 2 つ (または見方によっては 3 つ) のグループに配置することです: その要素の前に短くなる要素、要素自体、およびその要素の後に並べ替えます。要素はこれらの各グループ内でソートされていませんが、それらのグループに配置されます。つまり、ソート前にソートされるすべての要素がその前に配置され、次に要素自体が配置され、次にソートされる要素がその後に配置されます。

それはまさにあなたが望むものをあなたに与えます - あなたが提供する5の4番目と5番目の要素です。

最初に言ったように、要素が 5 つだけの場合は大した問題にはなりませんが、(たとえば) 1,000 万の上位 50000 が必要な場合は、適切なアルゴリズムを選択することで、はるかに大きな違いが生じるでしょう。

于 2013-10-03T15:22:08.107 に答える