Programa C para duplicar el primer elemento y mover cero hasta el final para una matriz dada

Programa C para duplicar el primer elemento y mover cero hasta el final para una matriz dada

En esta publicación de blog, aprendemos cómo escribir un programa en C para duplicar el primer elemento y mover cero hasta el final para una matriz determinada. Aquí estamos suponiendo que para una matriz dada de n enteros, '0' es un número no válido y todos los demás son números válidos.

Necesitamos convertir la matriz de tal manera que si tanto el elemento actual como el siguiente son válidos y son iguales, entonces duplique el valor actual y reemplace el siguiente número con 0. Después de la modificación, reorganice la matriz de modo que todos los 0 se desplacen al final. .

Ejemplo,

Input array : int arr[] = {2, 2, 0, 4, 0, 8};

Output array: 4 4 8 0 0 0



Input array: int arr[] = {0, 2, 2, 2, 0, 6, 6, 0, 0, 8};

Output array:  4 2 12 8 0 0 0 0 0 0

 

Algoritmo para duplicar el primer elemento y mover cero al final:

Entonces, veamos la lógica para duplicar el primer elemento y mover cero al final de una matriz dada. Supongamos que arr es una matriz de enteros de entrada dada de tamaño N (arr[N] ).

1. Recorre la matriz de 0 a n-1 (inclusive).

2. Verifique los valores actuales y siguientes usando la condición if. Si arr[i] no es igual a '0' y (arr[i]==arr[i+1]), donde arr[i] es el valor actual.

  1. Si la condición es verdadera, haga que el valor actual sea el doble de uno mismo.
  2. Actualice el siguiente elemento como 0 y haga i++.

3. Después de convertir la matriz, debe cambiar todo cero hasta el final. Ya hemos escrito un artículo sobre "cómo cambiar todo cero al final", puede verificar. Lea el artículo.

4 . En el último ahora imprima la matriz.

Si desea obtener más información sobre el lenguaje C, puede consultar este curso, Prueba gratuita disponible.

Obtenga su prueba gratuita

Programa en C para duplicar el primer elemento y mover el cero hasta el final

#include <stdio.h>

//Calculate array size
#define ARRAY_SIZE(a)  sizeof(a)/sizeof(a[0])


//swap function not handle null pointer scenario
//not much safe to use
void swap(int *s1, int *s2)
{
    int temp = *s1;
    *s1 = *s2;
    *s2 = temp;
}


// Function to move all zeros present in the array to the end
void moveAllZeroesAtArrayEnd(int arr[], int n)
{
    int i =0,j = 0;
    // each time we encounter a non-zero, j is incremented and
    // the element is placed before the pivot
    for (i = 0; i < n; i++)
    {
        if (arr[i] != 0)//non-zero
        {
            swap(&arr[i],&arr[j]);
            j++;
        }
    }
}

// function to rearrange the array elements
// after modification
int arrayModification(int arr[], int n)
{
    int i =0;

    const int status  = (n>1)? 0: -1;

    // traverse the array
    for (i = 0; i < n - 1; i++)
    {
        // if current element valid and equal to next
        if ((arr[i] != 0) && (arr[i] == arr[i + 1]))
        {
            // double current index value
            arr[i] = 2 * arr[i];

            // put 0 in the next index
            arr[i + 1] = 0;
            // increment by 1 so as to move two
            // indexes ahead during loop iteration
            i++;
        }
    }
    //call function when input array is valid
    if(status ==0)
    {
        //move all the zeros at the end of the array
        moveAllZeroesAtArrayEnd(arr, n);
    }

    return status;
}


int main()
{
    int arr[] = { 0, 2, 2, 2, 0, 6, 6, 0, 0, 8 };
    int i = 0;

    //get array size
    int arr_size = ARRAY_SIZE(arr);

    //modify and rearrange the array
    const int status = arrayModification(arr, arr_size);

    if(status == 0)
    {
        //print array element
        for (i = 0; i < arr_size; i++)
        {
            printf("%d ",arr[i]);
        }
    }
    else
    {
        printf("Enter valid array !");
    }
    
    return 0;
}

Artículos recomendados para ti:

  • El mejor regalo para programadores.
  • Los mejores kits electrónicos para programadores.
  • Programa en C para encontrar la Mediana de dos arreglos ordenados de diferentes tamaños.
  • Programa en C para encontrar la primera y última posición del elemento en una matriz ordenada
  • Escriba un programa en C para encontrar el número que falta en una matriz de enteros dada de 1 a n
  • Programa en C para encontrar el elemento más popular en una matriz
  • Encuentre el elemento más grande y el más pequeño en una matriz usando la programación C.
  • Programa C para encontrar incluso elementos que ocurren en una matriz de rango limitado
  • Encuentra la suma de todos los subconjuntos de un conjunto determinado.
  • Programa en C para segregar números pares e impares
  • Encuentre un elemento en la matriz tal que la suma de la matriz izquierda sea igual a la suma de la matriz derecha.
  • Programa C para encontrar el conteo de elementos pares e impares en la matriz.
  • Escribe un programa en C para encontrar la suma de los elementos del arreglo.
  • Programa en C para encontrar elementos extraños en una matriz de rango limitado
  • Encuentra la suma de los elementos de la matriz usando recursividad
  • Programa en C para invertir los elementos de un arreglo
  • Programa en C para encontrar el elemento máximo y mínimo en la matriz
  • Calcular el tamaño de una matriz sin usar sizeof en C
  • ¿Cómo crear una matriz dinámica en C?