Echándole un vistazo rápido se me ocurre la siguiente mejora (para que el código sea menos embarullado)
1. Meter todas las preguntas en un array, de forma que ejecutas un for que recorra el array haciendo las preguntas.
2. Guardas en un array la contestación de cada pregunta coincidiendo en posición pregunta y respuesta.
3. Como las preguntas son sí o no (0 o 1) juntas todas las respuestas en una cadena, de forma que tienes un número en binario 01010111.
4. Conviertes el número de binario a normal y te da un número único que identifica al animal. Esto será cierto ya que cada pregunta se corresponde con una posición binaria, por lo que es imposible que dos animales tengan el mismo número ya que en tu caso siempre haces todas las preguntas.
Esto vale para este caso, pero si las preguntas estuviesen condicionadas a las respuestas, habría que hacer algunas modificaciones. Me refiero a esto
http://es.wikipedia.org/wiki/%C3%81rbol_binario
Típico ejercicio de nodos enlazados.