Bueno como lo prometido es deuda aqui esta el código.
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