Informatică, întrebare adresată de angelicus, 9 ani în urmă

Dintre numerele intregi "a, b, c, d, e" sa se selecteze maximul2 (numarul mai mic decat numarul maximal si mai mare decat celelalte numere) si minimul2 (numarul mai mare decat cel mai mic numar si mai mic decat restul).
Numerele se citesc apoi se fac operatii (cin>>a>>b>>c>>d>>e;).


angelicus: (cin>>a>>b>>c>>d>>e;)
artur99: Si care-i cerinta? :)

Răspunsuri la întrebare

Răspuns de blindseeker90
1
#include <iostream>
#include <limits.h>//pentru limitele intregi
using namespace std;

int main(){
    //2 minime si 2 maxime
    //maximele au valoarea cea mai mica a intregilor, orice numar intreg
    //este mai mare ca ele
    //minimele au valoarea maxima, deci orice numar intreg este mai mic ca ele
    int i,max1=INT_MIN,max2=INT_MIN,min1=INT_MAX,min2=INT_MAX;
    int a[5];
   
    for(i=0;i<5;i++){
        cin>>a[i];
    }
   
    for(i=0;i<5;i++){
        //daca numarul este mai mare decat maximul 1
        //inlocuieste atat maximul 1,
        //cat si da lui max2 fosta valoarea a lui max 1
        if(max1<a[i]){
            max2=max1;
            max1=a[i];
        }
        //daca numarul este intre max1 si max 2, atunci schimba doar max2
        else if(max2<a[i]){
            max2=a[i];
        }
        //acelasi rationament numai ca pentru mai mic
        if(min1>a[i]){
            min2=min1;
            min1=a[i];
        }
        else if(min2>a[i]){
            min2=a[i];
        }       
    }
    cout<<"Al doilea numar cel mai mic este: "<<min2<<endl;
    cout<<"Al doilea numar cel mai max este: "<<max2<<endl;
    return 0;
}



artur99: Nu cred ca exista, si sa fie si eficiente :) Ai aici combinari de 5 luate cate 2, ca sa verifici fiecare dintre ele
artur99: Le declari globale, apoi cu o functie faci switch intre ele (a, b) (a, c) ... (e, e) deci combinari de 5 luate cate 2
angelicus: da, exista ceva solutii, insa nu chiar eficiente... ma gandesc la ceva fara sa fac prea multe comparatii :D
AntiEaglesDavids: ce se intampla cand esti plictisit:
AntiEaglesDavids: #include <iostream>
#include <limits.h>
using namespace std;

int main()
{
int a, b, c, d, e, x, y;
cin >> a >> b >> c >> d >> e;
x = max(a, max(b, max(c, max(d,e))));
if(x == a) a = -1;
else if(x == b) b = -1;
else if(x == c) c = -1;
else if(x == d) d = -1;
else e = -1;
cout << "Max2:" << max(a, max(b, max(c, max(d,e)))) << ' ';
if(-1 == a) a = x;
else if(-1 == b) b = x;
else if(-1 == c) c = x;
else if(-1 == d) d = x;
else e = x;
y = m
AntiEaglesDavids: y = min(a, min(b, min(c, min(d,e))));
if(y == a) a = INT_MAX;
else if(y == b) b = INT_MAX;
else if(y == c) c = INT_MAX;
else if(y == d) d = INT_MAX;
else e = INT_MAX;
cout << "Min2:" << min(a, min(b, min(c, min(d,e))));
}
AntiEaglesDavids: fara vectori dar arata ca naiba :)))
AntiEaglesDavids: 28 de comparatii in total...
angelicus: mersi :D
AntiEaglesDavids: cu placere, stiu ca arata naspa de tot si sunt sigur ca se poate si mai bine dar asta mi-a venit in minte in 10 minute :)))
Răspuns de artur99
1
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
    int n=5, a, b, c, d, e;
    cin>>a>>b>>c>>d>>e;
    int v[]={a,b,c,d,e};

    sort(v, v+n);
    int min2 = v[1], max2 = v[n-2];
}

blindseeker90: Nu te inteleg. Aici nu este un concurs de informatica sau cum faci codul cel mai eficient posibil. Este clar ca userul care a postat nu stapaneste bine informatica si este mai interesat de o gandire algoritmica decat sa i se dea ceva intr-o cutie neagra. Macar daca il invatai cum sa faca o sortare printr-o metoda, sa-i dai complexitatea operatiei, asa nu-i faci nici o favoare cu acest cod. Siteul ar trebui sa aiba si un rol educativ, nu numai rezolvator de probleme
artur99: El sigur stie un algoritm de sortare, si sigur a rezolvat algoritmul asta... Cauta doar o metoda mai buna... :D
AntiEaglesDavids: Complexitate O(N logN). Wow ce greu era omg sunt un geniu!!!! (Si de parca nu stie sortarile, hai fi serios)
blindseeker90: AntiEaglesDavids: Sunt serios. Daca stia sa faca sortari, punea o asemenea intrebare? Nu se gandea si el sa sorteze sirul si sa aleaga a doua valoare si penultima valoare? Daca stia sa sorteze, putea sa raspunda intrebarii asteia intr-o mie de feluri, putea sa faca crescator, descrescator, putea sa modifice algoritmul de dividere precum quicksort ca atunci cand ajunge la ultimul set, minimul este numarul mai mare dintre cele doua ramase, si maximul este minimul din cele doua ramase.
AntiEaglesDavids: Crede-ma ca stie.
angelicus: ei, cu vectori puteam sa le sortez si eu :))))
Alte întrebări interesante