Ver Mensaje Individual
  #8 (permalink)  
Antiguo 01/12/2014, 03:32
dehm
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 14 años, 3 meses
Puntos: 10
Respuesta: Mastermind c++ (juego)

Pues si que estaba mal lo mío, ya que mi código dejaba que una posición fuera a la vez Acierto y Aproximación.

Ahora le he hecho un añadido para que no contemple esa doble condición:
Código C++:
Ver original
  1. #include <iostream>
  2. #include <cstring>
  3. #include <sstream>
  4.  
  5. using namespace std;
  6. string evaluar (string cadena, string referencia);
  7.  
  8. int main()
  9. {
  10.  
  11.     cout<<evaluar("12345","54321")<<endl;
  12.     cout<<evaluar("yybr","ygbr")<<endl;
  13.     return 0;
  14. }
  15.  
  16. string evaluar (string cadena, string referencia)
  17. {
  18.     int acertados=0;
  19.     int aproximaciones=0;
  20.     //asumimos que las cadenas tienen el mismo tamaño
  21.     for (int i=0; i<cadena.size(); i++)
  22.     {
  23.         if (cadena[i]==referencia[i])
  24.         {
  25.             acertados++;
  26.         }
  27.         else
  28.         {
  29.             for (int j=0; j<cadena.size(); j++)
  30.             {
  31.                 if (cadena[i]==referencia[j] && cadena[j]!=referencia[j])//aqui está el añadido
  32.                 {
  33.                     aproximaciones++;
  34.                     break;
  35.                 }
  36.             }
  37.         }
  38.     }
  39.     stringstream iss;
  40.     iss<<acertados<<"A, "<<aproximaciones<<"a";
  41.     return iss.str();
  42. }

A ver si ahora cumple mejor

Sobre lo de comprobar las minúsculas...eres la 2ª persona que propone esa forma (y ambos personas muy solventes), pero pienso que este método es menos eficaz, ya que obliga a crear una copia, pasarla a minúsculas, y entiendo que la sobrecarga del operador == igualmente hace un recorrido por la cadena.
¿Puede ser o estoy diciendo una tontería?
@b3salvat: En caso de duda, haz caso a eferion
__________________
Mi calculadora en Qt