-1
votes

C ++ Fonction Pour trouver la somme de quatre éléments maximum minimaux dans un tableau ne fonctionne pas

Je résolvez une question dans laquelle je dois écrire une fonction qui trouve la somme maximale et minimale de quatre entiers dans un tableau qui lui est transmis puis l'affiche.

Voici mon code: P>

void miniMaxSum(vector<int> arr) {

        int minsum=0;
        int maxsum=0;
        int l1,l2,l3,l4;
        int s1,s2,s3,s4;
        l1=arr[0];
        s1=arr[0];
        for(int i=1;i<arr.size();++i)
        {
            if(l1<arr[i])
            l1=arr[i];
            if(s1>arr[i])
            s1=arr[i];
        }
        l2=arr[0];
        s2=arr[0];
        for(int i=1;i<arr.size();++i)
        {
            if(l2<arr[i]&&arr[i]!=l1)
            l2=arr[i];
            if(s2>arr[i]&&arr[i]!=s1)
            s2=arr[i];
        }
        l3=arr[0];
        s3=arr[0];
        for(int i=1;i<arr.size();++i)
        {
            if(l3<arr[i]&&arr[i]!=l2&&arr[i]!=l1)
            l3=arr[i];
            if(s3>arr[i]&&arr[i]!=s2&&arr[i]!=s1)
            s3=arr[i];
        }
        l4=arr[0];
        s4=arr[0];
        for(int i=1;i<arr.size();++i)
        {
            if(l4<arr[i]&&arr[i]!=l2&&arr[i]!=l1&&arr[i]!=l3)
            l4=arr[i];
            if(s4>arr[i]&&arr[i]!=s3&&arr[i]!=s2&&arr[i]!=s1)
            s4=arr[i];
        }
        minsum=s1+s2+s3+s4;
        maxsum=l1+l2+l3+l4;
        cout<<minsum<<" "<<maxsum;
}


11 commentaires

Cet algorithme va échouer s'il y a des éléments répétés au minimum ou au maximum.


@Cigien Il échoue également à des tableaux sans répétition.


pour l'entrée 1,2,3,4,5 Le résultat devrait être de 10 14, mais il donne 4 14, pourquoi @Cigien Pls dit


OK, pourquoi ne fournissez-vous pas de cas de test qui échoue et montrez la sortie attendue et la production réelle.


@Cigien YES BRO pour l'entrée 1,2,3,4,5 La sortie doit être de 10 14, mais ma sortie est de 4 14


Parce que vous initialisez s s sur arr [0] , qui est le plus petit élément, et seule la mise à jour lorsque vous trouverez un élément plus grand, ce qui est impossible. Donc, tous vos s sont 1.


et pour l'entrée 7 69 2 221 8974, la sortie est de 23 9271 alors qu'elle devrait être 299 9271


@Cigien Pouvez-vous suggérer une autre méthode pour ce faire?


Comme je l'ai dit ci-dessus, triez le tableau et regardez le premier et les 4 derniers éléments. Vous pouvez utiliser std :: trier pour cela. Vous pouvez jeter un coup d'œil sur std :: NTH_Element pour être plus efficace.


@Cigien Oh merci, c'est une bonne idée, je vais sûrement l'essayer ... merci beaucoup


Laissez-nous Continuer cette discussion dans le chat .


4 Réponses :


2
votes
void miniMaxSum(vector<int> arr) {
    sort(arr.begin(), arr.end());
    int sumMin = 0, sumMax = 0, len = arr.size() - 1;
    for(int i = 0; i < 4; i++){
        sumMin += arr[i];
        sumMax += arr[len - i];
    }
    cout<<"minimum sum: "<<sumMin<<endl;
    cout<<"maximum sum: "<<sumMax<<endl;
}

0 commentaires

0
votes

Si vous envisagez de complexité, alors que Daniel mentionné, vous pouvez le faire en utilisant O (n journal n) mais vous pouvez le faire en utilisant O (n) N est la longueur de la matrice.

Voici le segment de code xxx


0 commentaires

0
votes

En supposant que vous puissiez utiliser la bibliothèque standard: xxx

affiché pour fonctionner sur https://repl.it/repls/entiretornbotany


0 commentaires

0
votes

Trier la matrice à l'aide de C ++ STL Trier (tableau, Array + N), puis choisissez N numéro de départ ou à partir de la fin. Serait complété dans Big Oh de Nlogn


0 commentaires