Adivinar un número de 4 cifras, picas y fijas
Publicado por
el
//Adivinar un número de 4 cifras, picas y fijas #include <iostream> #include <math.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> using namespace std; //Ayuda a generar número randómicos más eficientemente int rdtsc() { __asm__ __volatile__("rdtsc"); } main() { //Mostrar tildes y acentos del español setlocale(LC_CTYPE, "Spanish"); int n[4] = { 0, 0, 0, 0 }, f = 0, p = 0, forzar = 0; char numero[4]; char nusuario[4]; // *secret es un apuntador a numero char* secret = numero; //Condiciones necesarias para generar números randómicos que no repitan digitos con un esfuerzo adicional while (n[0] == n[1] || n[0] == n[2] || n[0] == n[3] || n[1] == n[2] || n[1] == n[3] || n[2] == n[3] || forzar < 100) { // se untiliza la función rdtsc para generar mejores números randómicos srand(rdtsc()); n[0] = rand() * time(0) % 10; n[1] = rand() * time(0) % 10; n[2] = rand() * time(0) % 10; n[3] = rand() * time(0) % 10; forzar++; } cout << "Este juego genera un número aleatorio de 4 cifras, usted deberá adivinarlo con las pistas arrojadas." << endl; cout << "Pica significa que algún número de los digitados esta dentro del número secreto" << endl; cout << "Fija significa que algún número de los digitados esta dentro del número secreto y se encuentra en la misma posición del número secreto" << endl; cout << "Usted cuenta con 10 oportunidades, mucha suerte!!!!!" << endl; for (int i = 0; i < 4; i++) { secret += sprintf(secret, "%d", n[i]); } int oportunidades = 0; int fijas = 0; while (oportunidades < 10 && fijas < 4) { int ln = 0; int repetido = 0; //Se debe validar que él número ingresado tenga 4 cifras y que no tenga cifras repetidas while (ln != 4 && ln != 100) { cout << endl << "Ingrese un numero de 4 cifras: "; cin >> nusuario; ln = strlen(nusuario); for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if (nusuario[i] == nusuario[j] && i != j) { ln = 100; } } } if (ln == 100) { //Se recuernda al usuario que el número secreto no repite cifras cout << endl << "Recuerde que el número secreto no tiene cifras repetidas" << endl; ln = 101; } else if (ln != 4) { //Se recuerda al usuario que el número debe ser de 4 cifras cout << endl << "Recuerde que el número debe ser de 4 cifras" << endl; } } //Se compara cada cifra del numero secreto comparado con cada cifra del numero digitado por el usuario for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if (nusuario[i] == numero[j] && i != j) { p++; } if (nusuario[i] == numero[j] && i == j) { f++; } } } fijas = f; oportunidades++; cout << "Usted tiene " << f << " fijas y " << p << " picas" << endl; f = 0; p = 0; }; if (fijas == 4) { cout << endl; cout << "Usted ganó con " << oportunidades << " intentos." << endl << endl; } if (oportunidades >= 10) { cout << endl; cout << "Usted perdió" << endl; cout << "El numero oculto era: " << numero << endl << endl; } system("pause"); return 0; }
Comentarios
Publicar un comentario