Reto Programación

Iniciado por Oblivi0n, 20 Diciembre 2010, 18:26 PM

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

ace332

#10
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 */
 scanf("%d",&ne);
 /* 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;
 puts(a);
 /* efectuar los cambios en el arreglo */
 while(csaltos>=0)
 {
   permutar(&a[uesp],&a[uesp+des]);
   uesp+=des;
   puts(a);
   /* 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