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