Rotar n veces un arreglo con n digitos

Iniciado por chona, 6 Marzo 2020, 04:28 AM

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

chona

Hola tengo que determinar un vector con n casillas y hacerlo girar determinadas veces para calcular el vector y
ejemplo
casillas=5 giro=1 vectorx {1,2,3,4,5} vectory {5,1,2,3,4}
Lo hice de la siguiente forma pero no entiendo muy bien donde colocar los giros para que rote el arreglo
Agradeceria su ayuda

#include <stdio.h>
#define N 10

int main() {
    int n,g;
scanf ("%i" ,&n);
scanf(" %i",&g);
    int i;
   int  x[n];//arr
    int y[n];//arr2

    for( int i = 0; i < n; i++ );{
        scanf (" /n%i/n", &x[i]);}

for (i=0;i<g;i++)
{
    x[n]=x[i+1];
  x[i+1]=x[0];
  x[0]=y[n];
  printf ("%i",y[n]);
}

    return 0;
}

K-YreX

Para rotar las posiciones de un array necesitas guardar uno de los valores en una variable auxiliar para empezar a guardar los nuevos valores en la posición que has guardado fuera y al final restaurar ese valor que tiene la variable auxiliar. Ahora bien, hay muchas formas de hacerlo.

Una forma visual es hacer una función que rote el array a la derecha 1 vez y hacer un bucle for que llame a dicha funciones n veces siendo n el número de posiciones que se quiere rotar el array a la derecha. No es lo más eficiente pero como te digo es visual.

void rotarDerecha(int *numeros, int size){
  int aux = numeros[size-1];
  for(size_t i = size - 1; i > 0; --i)
    numeros[i] = numeros[i-1];
  numeros[0] = aux;
}

int main(){
  //...
  for(size_t i = 0; i < rotaciones; ++i)
    rotarDerecha(numeros, size);
  //...
}


Para mejorar un poco la eficiencia del código, en vez de repetir el for tantas veces como el valor de rotaciones, podemos hacerlo (rotaciones % size) veces. Así aunque el número de rotaciones sea muy grande, siempre daremos menos de una vuelta completa al array.

Si lo quieres hacer más eficiente puedes trabajar sobre esta versión y utilizar un poco las matemáticas para sacar alguna relación entre las posiciones del array el número de rotaciones. Esta parte te la dejo a ti que te va a ser más satisfactorio que si te lo encuentras hecho.

Y recuerda que si te atascas en alguna parte puedes volver a dejar tu código para que te echemos una mano. Y te recomendaría usar nombres de variables más significativos; sobre todo si el código lo van a tener que leer terceras personas como es el caso... :rolleyes:   Suerte.  :-X
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;