Dev - C++ - Picas y fijas (inverso)

 
Vista:
sin imagen de perfil
Val: 8
Ha aumentado su posición en 10 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Picas y fijas (inverso)

Publicado por Santiago (1 intervención) el 04/03/2020 03:48:02
Muy buenas tardes.
Necesito ayuda para programa de Picas y Fijas en c++ el cual consiste en tratar de adivinar un número en la menor cantidad de intentos. En cada intento, el jugador dice 4 dígitos (no repetidos) y el oponente le da pistas de cuántos aciertos tuvo, sin indicarle cuales fueron, de la siguiente forma: Si algún dígito que dice el jugador se encuentra dentro del número a adivinar, pero no está en la posición correcta, se llama PICA. Si el dígito se encuentra en la posición adecuada, se llama FIJA. Así, las pistas serán la cantidad de PICAS y la cantidad de FIJAS que se tienen. El juego termina cuando algún jugador tiene 4 FIJAS (4 dígitos en el orden adecuado), pero el problema es que ahora es inverso, la "maquina" es la que adivina el numero que uno piensa y se termina el programa cuando la maquina adivine los 4 digitos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Jonathan
Val: 9
Ha disminuido su posición en 5 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Picas y fijas (Clásico)

Publicado por Jonathan (1 intervención) el 10/03/2020 01:24:56
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <bits/stdc++.h>
using namespace std;
int main() {
	system ("color F0");
	int i=3, j=3;
	int oculto[i], me[j];
	int picas=0, fijas=0;
	int contador,numu=0; //Declaración de variables
 
	//Menú
	cout<<"\t\t\t------------------------------ PICAS Y FIJAS ------------------------------" <<endl<<endl;
    cout<<"Instrucciones PicasYFijas:"<<endl<<endl;
    cout<<"El usuario debe ingresar un numero de 4 digitos, todos seguidos; No debe haber un 0 al comienzo del numero"<<endl<<"y no se deben ingresar 2 veces el mismo numero."<<endl<<endl;
	cout<<"Si las cifras son coincidentes con sus posiciones correctas, son fijas, si estan en diferentes posiciones, son picas."<<endl<<endl;
	cout<<"Juegue:"<<endl;
 
	//Instrucción que inicializa el generador de números aleatorios
	srand(time(NULL));
	do{
	do{
	for( i = 0; i <=3; i++){
	oculto[i]= rand()%10; //Asigna al arreglo del numero oculto el rand que seria un numero aleatorio que siempre va a cambiar - %10 Quiere decir que sean numeros de 0 a 9
	}
	}while(oculto[0]==oculto[1] || oculto[0]==oculto[2] || oculto[0]==oculto[3] || oculto[1]==oculto[2] || oculto[1]==oculto[3] || oculto[2]==oculto[3]);//Para que en el dato generado no se repitan números
    }while(oculto[0]==0);//Que el primer numero no sea 0
	//Numero Oculto//
	cout<<"Por si quiere ganar de una vez: "<<oculto[0]<<oculto[1]<<oculto[2]<<oculto[3]<<endl;
 
 
    do{ /*Generé un ciclo dentro de otro ciclo para que en un intento se efectue todas las evaluaciones en los numeros ingresados y que se repitan. Más adelante se especifican sus funciones.*/
    do{
    picas=0;
	fijas=0;
    do{
    do{
	do{
    cout<<"Escriba un numero de 4 cifras: ";
    cin>> numu;
     if(cin.fail())//Si no hay numero y se tomará como caracter porque fallo el ciclo pero entonces el cin.fail nos tornará true esa accion para realizar lo siguiente
    {
    cin.clear();
    cin.ignore(50000, '\n');//Se borrara el primer caracter y se ignoraran los siguientes 50000
	}
    }while(cin.fail());//Solo ocurrirá en el caso de los caracteres
 
	//Descomposición a 0
    me[0]=numu/1000;
	me[1]=(numu-(me[0]*1000))/100;
	me[2]=(numu- (me[0]*1000 + me[1]*100))/10;
	me[3]=numu-(me[0]*1000 + me[1]*100 + me[2]*10 );
 
	if(me[0]==0)//Si el primer dato es 0 dará un error
	{
	 cout<<"ERROR, no ha seguido bien alguna instruccion "<<endl;;
	}
	else if(me[0]==me[1] || me[0]==me[2] || me[0]==me[3] || me[1]==me[2] || me[1]==me[3] || me[2]==me[3])//Si se repite un numero que el usuario ingresó
	{
	cout<<"ERROR, no ha seguido bien alguna instruccion "<<endl;
	}
    }while(me[0]==me[1] || me[0]==me[2] || me[0]==me[3] || me[1]==me[2] || me[1]==me[3] || me[2]==me[3]);//Si todo es igual
    }while(me[0]==0);//Que el primer numero no sea 0
    }while(numu>9999 || numu<0);// Tamaño del numero para asegurar que sea de 4 digitos
 
	//Verificar el dato del usuario de acuerdo a las fijas
	for(i=0, j=0; j<=3; i++)
	{
		if(oculto[i]==me[j])
		{
			fijas++;
		}
	 	j++;
	}
 
	//Verificar el dato del usuario de acuerdo a las picas
	if( me[0]==oculto[1] || me[0]==oculto[2] || me[0]==oculto[3] )
	{
		picas++;
	}
	if(me[1]==oculto[0] || me[1]==oculto[2] || me[1]==oculto[3] )
	{
		picas++;
	}
    if(me[2]==oculto[1] || me[2]==oculto[0] || me[2]==oculto[3] )
	{
		picas++;
	}
	if(me[3]==oculto[1] || me[3]==oculto[2] || me[3]==oculto[0] )
	{
		picas++;
	}
	//Impresión en pantalla de resultado parcial y final
	contador++;
	cout<<"Tiene "<<fijas<<" Fijas Y "<<picas<<" Picas"<<endl;
	}while(fijas!=4);
	cout<<"Felicitaciones, ha logrado adivinar, estos son sus intentos: "<<contador<<" - PicasYFijas Copyright© "<<endl;
	system("PAUSE");
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar