ajam, hay cierto parecido. En ambos problemas se tienen que realizar movimientos con ciertas restricciones
Bueno como lo prometido es deuda aqui esta el código.
#include <stdio.h>
#define MAX_ELEM 1000
void permutar(char *a,char *b)
{
char temp=*a;
*a=*b;
*b=temp;
}
int main(void)
{
int i,diravance=1,dirsalto=1,csaltos=1,saltos=1,incsaltos=1,ne,te,uesp,des=-1;
char a[MAX_ELEM];
/* leer la cantidad de elementos de cada tipo */
/* establecer la posicion inicial de los 1's y 2's */
te=2*ne+1;
for(i=0;i<te;i++)
a[i]=(i<ne)?'1':'2';
a[ne]=' ';
a[te]='\0';
uesp=ne;
/* efectuar los cambios en el arreglo */
while(csaltos>=0)
{
permutar(&a[uesp],&a[uesp+des]);
uesp+=des;
/* determinar siguiente movimiento */
if(saltos)
{
des=dirsalto*2;
saltos--;
}
else
{
des=diravance;
saltos=(csaltos+=incsaltos);
dirsalto*=-1;
diravance*=-1;
}
/* hacer el ajuste necesario luego de la mitad del total de movimientos */
if(saltos>=ne||ne==1)
{
incsaltos=-1;
diravance=-diravance;
}
}
return 0;
}
Que tengan unas felices fiestas!
Saludos
EDIT: Para no hacer doble post