es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Encuentra los índices de los números máximos en una matriz.

Tengo un programa en C que encuentra el primer y segundo máximo en un arreglo, pero quiero obtener los índices de estos elementos. Aquí está mi código:

#include <stdio.h>
int main(){
    int max1,max2,n;
    scanf("%d",&n);
    int a[n],i;
    int i_m1,i_m2;
    i_m1 = i_m2=0;
    for(i = 0;i < n;i++){
        scanf("%d",&a[i]);
    }
    max1 = max2 = 0;
    for(i = 0;i < n;i++){
        if(a[i]>max1){
            max1=a[i];
            //i_m1++;
        } else if(a[i]>max2 && a[i]<max1){
            max2=a[i];
            //i_m2++;
        }
    }
    printf("%d %d\n",max1,max2);
    //printf("%d %d\n",i_m1,i_m2);
    for(i = 0;i < n;i++){
        printf("%d ",a[i]);
    }
    return 0;
}

primero ingreso el número de elementos en el arreglo y luego el arreglo.
por ejemplo, si tengo un arreglo:

número de elementos: 5
elementos en el arreglo: 
3 4 2 5 1
índices:
0 1 2 3 4
max1=5, max2=4
i_m1=3, i_m2=1

¿cómo puedo obtener los índices i_m1 y i_m2? max2=”a[i];” i_m2++;=”” }=”” }=”” printf(“%d=”” %d\n”,max1,max2);=”” printf(“%d=”” %d\n”,i_m1,i_m2);=”” for(i=”0;i” <=”” n;i++){=”” printf(“%d=”” “,a[i]);=”” }=”” return=”” 0;=”” }=”” ="" primero="" ingreso="" el="" número="" de="" elementos="" en="" el="" arreglo="" y="" luego="" el="" arreglo.="" por="" ejemplo,="" si="" tengo="" un="" arreglo:=""=”” número=”” de=”” elementos:=”” 5=”” elementos=”” en=”” el=”” arreglo:=”” 3=”” 4=”” 2=”” 5=”” 1=”” índices:=”” 0=”” 1=”” 2=”” 3=”” 4=”” max1=”5,” max2=”4″ i_m1=”3,” i_m2=”1″ “`=”” ¿cómo=”” puedo=”” obtener=”” los=”” índices=”” i_m1=”” y=””></max1){
max2=a[i];
//i_m2++;
}
}
printf(“%d %d\n”,max1,max2);
//printf(“%d %d\n”,i_m1,i_m2);
for(i = 0;i < n;i++){
printf(“%d “,a[i]);
}
return 0;
}


primero ingreso el número de elementos en el arreglo y luego el arreglo. por ejemplo, si tengo un arreglo:

número de elementos: 5
elementos en el arreglo:
3 4 2 5 1
índices:
0 1 2 3 4
max1=5, max2=4
i_m1=3, i_m2=1
“`
¿cómo puedo obtener los índices i_m1 y i_m2?></stdio.h>

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para obtener los índices de los dos elementos máximos en el arreglo, puedes usar dos variables para realizar un seguimiento de los índices mientras recorres el arreglo.

    Aquí está el código modificado:

    #include <stdio.h>
    
    int main() {
        int max1, max2, n;
        scanf("%d", &n);
        int a[n], i;
        int i_m1, i_m2;
        i_m1 = i_m2 = 0;
        for (i = 0; i < n; i++) {
            scanf("%d", &a[i]);
            if (a[i] > a[i_m1]) {
                i_m2 = i_m1;
                i_m1 = i;
            } else if (a[i] > a[i_m2] && a[i] != a[i_m1]) {
                i_m2 = i;
            }
        }
        max1 = a[i_m1];
        max2 = a[i_m2];
        printf("Max1 = %d en el índice %d\n", max1, i_m1);
        printf("Max2 = %d en el índice %d\n", max2, i_m2);
        return 0;
    }
    

    En el código modificado, agregamos dos variables i_m1 e i_m2 para realizar un seguimiento de los índices del primer y segundo elemento máximo respectivamente. Mientras recorremos el arreglo, comparamos el elemento actual tanto con el primer máximo (a[i_m1]) como con el segundo máximo (a[i_m2]). Si el elemento actual es mayor que el primer máximo, actualizamos i_m2 a i_m1 e i_m1 al índice del elemento actual. Si el elemento actual está entre el primer y el segundo máximo, actualizamos i_m2 al índice del elemento actual.

    Al final del bucle, tenemos los índices de los dos elementos máximos, que podemos usar para imprimir sus valores y índices respectivamente.</stdio.h>

Comments are closed.