Sacar numeros en medio de un array usando c++

Iniciado por Borito30, 11 Marzo 2017, 05:38 AM

0 Miembros y 1 Visitante están viendo este tema.

Borito30

Hola hay alguna de sacar de forma correcta y eficiente dos numeros que se encuentran en un array si yo conozco su máximo y su mínimo? El código sería del siguiente modo:
#include <iostream>
#include <sstream>
#include <vector>
using namespace std;

int num1,z,l,peque,grande;
int numero,division,resto,i,a,j;
int arr[4];
int mayor[4];
int menor[4];
int mayor1;
int fin = 0;
int menor1;
int contador = 0;

int prueba(int num){
    division = num;
    resto = num;

    for(i=0;i<=3;i++){
        resto = division%10;
        if(i==3){
            arr[i] = division;
        }else{
            arr[i] = resto;
        }
        division/=10;
    }
    int o,mini,maxi,u;


    mini=arr[0];
    maxi=mini;


    for(o=0;o<4;o++)
            {
            if (arr[o]<mini) mini=arr[o];
            if (arr[o]>maxi) maxi=arr[o];
            }

    peque = 0;

   
    mayor [0] = maxi;
    mayor [1] = grande;
    mayor [2] = peque;
    mayor [3] = mini;

    menor [0] = mini;
    menor [1] = peque;
    menor [2] = grande;
    menor [3] = maxi;

    stringstream ss;

    ss<<menor[0];   //this can be run as a loop
    ss<<menor[1];
    ss<<menor[2];
    ss<<menor[3];

    ss>>menor1;

    stringstream s;

    s<<mayor[0];   //this can be run as a loop
    s<<mayor[1];
    s<<mayor[2];
    s<<mayor[3];
    int con1,con2;
    con1=0;
    con2=0;
    s>>mayor1;
    fin = mayor1 - menor1;
}

int main(){
/* Declaramos el array y le damos valores */
    cout << "Introduce un numero: ";
    cin >> numero;
    fin = numero;
    while(fin!=6174){
        prueba(fin);
        break;
        cout << fin << " = " << mayor1 << " - " << menor1;
        cout << "\n";
        contador++;
    }
    cout << "Numero de intentos: " << contador;
    return 0;
}


Y para sacar el codigo de en medio supuestamente haria esto:
for(z=0;z<4;z++){
        num1=arr[z];
        if(arr[z] != mini || arr[z] != maxi){
            for(l=0;l<4;l++){
                if(arr[l]<num1 && arr[l] != maxi && arr[l] != mini){
                    peque=arr[l];
                    cout << peque;
                }else if(arr[l]>num1 && arr[l] != maxi && arr[l] != mini){
                    grande = arr[l];
                    cout << grande;
                }
            }
    }


Claro que cuando lo que cite anteriormente me repite los numeros muchas veces por lo que supongo que lo estaré haciendo mal. Hay alguna maneras de sacar los numeros de en medio. Tengo el numero 1234. Saque el máximo 4, el mínimo 1 pero como podría sacar el 2 y 3 por separado?
Estoy en contra del foro libre y la Sección de juegos y consolas (distraen al personal)

dato000

Tendria que hacerse otro loop en donde tome los elementos que no sean los que se estan necesitando (max & min).

No tengas tanto miedo por usar recorridos for, si intentas romper el recorrido, seguro se quedaran elementos que necesitas en el camino, lo mejor es recorrer toda el array, y una vez comprobados los filtros, verificar los resultados, si se necesita algo adicional, simple, filtra nuevamente.