ej 9

ej 9

de Bruno Stefano Lombardo Palleiro -
Número de respuestas: 2

Se me ocurrió esta solución que es distinta a la del video.

Ejecutando el código a mano pareciera cumplir lo pedido.

¿es correcta la solución?


void vasos2(bool * V, uint inf,uint sup){

  if (inf<sup) {
     if(inf%2 !=0){
          V[inf]=false;
           V[sup]=true;
     }
  vasos2(V,inf+1,sup-1);
  }
}

void vasos(bool *V,uint n){
    return vasos2(V,0,n-1)
}

En respuesta a Bruno Stefano Lombardo Palleiro

Re: ej 9

de Fernando Fernandez -
Sí, parece correcta.

Tenés que tener en cuenta que vasos2 no es el mismo problema que vasos, es una segunda generalización (además de la que ya estaba, que consistía en que el segmento no necesariamente empiece en la posición 0 del arreglo). La precondición es la misma: la primera mitad está llena y la segunda vacía. También es la misma una parte de la solución: que los vasos queden alternados. Pero en la versión original se requería que el primer vaso del  segmento parámetro quedara lleno. En esta versión generalizada eso depende del parámetro inf.

Esta versión podría considerarse algo ineficiente porque hace llamadas en las que se sabe que no se hará nada. Pero esa ineficiencia no nos va a preocupar. En definitiva, es una solución correcta que, como en tantos problemas, usa la generalización para poder resolverlo.