Título: comprobar numero repetido en un vector
Publicado por: MessageBoxA en 25 Junio 2014, 21:39 pm
buenas estoy haciendo un juego de rol donde una de las condiciones es que no se pueda utilizar 2 poderes iguales por el mismo jugador, y no logro dar con el code adecuado aqui una muetra de lo que hice pero esta mal debido a que el valor que ingrese lo almacena pero despues en el for caigo en decir que esta repetido aunque en realidad solo esta en una sola posicion ayudenme gracias scanf("%d",&res2); poderj1[indice]=res2; for(int cc=0;cc<=res2;cc++) { if(poderj1[cc]==res2) { printf("\n no puedes utilizar dos poderes iguales!!!\n"); getch(); } } indice=indice+1;
Título: Re: comprobar numero repetido en un vector
Publicado por: daryo en 25 Junio 2014, 21:45 pm
has un contador que inicie en 0 que se incremente uno cuando entra al if.
luego con otro if compruebas el contador y si es mayor a uno si entro al if mas de una vez entonces esta repetido
Título: Re: comprobar numero repetido en un vector
Publicado por: Risketo en 25 Junio 2014, 21:54 pm
Una solución posible seria hacer un vector de igual tamaño que el vector de los poderes y ir guardando ahí los poderes usados, cada vez que el usuario elige un poder puedes comprobar si está repetido recorriendo el vector de poderes usados. Algo así: #include <stdio.h> int main(void) { int poderes[100]; int usados[100]; int i,poderElegido,x; for(i=0; i<100;i++) //Lleno el array de poderes del 0 al 99 poderes[i] = i; for(i=0;i<100;i++) //lleno el array de usados de '-1' usados[i] = -1; i = 0; while(i<5) { //Pido un poder y lo voy guardando en el array 'usados' scanf("%d",&poderElegido ); for(x=0;x<100;x++) { if(usados[x] == poderElegido) { printf("Ya has elegido este poder"); i = 5; //salimos del bucle si ya hemos usado ese poder } } usados[i] = poderElegido; i++; } return 0; }
Título: Re: comprobar numero repetido en un vector
Publicado por: eferion en 25 Junio 2014, 22:06 pm
Intuyo que estás usando C++... comprobar valores duplicados es tan sencillo como: opción 1:std::vector< int > poderesUsados; int poder; // Comprobar si ya está usado el poder // std::find esta en el include "algorithm" auto it = std::find( poderesUsados.begin( ), poderesUsados.end( ), poder ); if ( it == poderesUsados.end( ) ) { // No se ha usado el poder todavía // marcamos el poder como usado poderesUsados.push_back( poder ); }
opción 2:std::set< int > poderesUsados; // da igual que usemos el mismo poder 20 veces... al final solo quedará un solo uso por cada poder: poderesUsados.insert( 1 ); poderesUsados.insert( 2 ); poderesUsados.insert( 1 ); poderesUsados.insert( 1 ); // Imprimira: 1 2 for( auto it = poderesUsados.begin( ); it != poderesUsados.end( ); ++it ) cout << *it << " ";
Opción 3:Hay infinitas formas, yo te he mostrado dos diferentes.
Título: Re: comprobar numero repetido en un vector
Publicado por: MeCraniDOS en 26 Junio 2014, 02:05 am
#include <stdio.h> int main(void) { int poderes[100]; int usados[100]; int i,poderElegido,x; for(i=0; i<100;i++) //Lleno el array de poderes del 0 al 99 poderes[i] = i; for(i=0;i<100;i++) //lleno el array de usados de '-1' usados[i] = -1; i = 0; while(i<5) { //Pido un poder y lo voy guardando en el array 'usados' scanf("%d",&poderElegido ); for(x=0;x<100;x++) { if(usados[x] == poderElegido) { printf("Ya has elegido este poder"); i = 5; //salimos del bucle si ya hemos usado ese poder } } usados[i] = poderElegido; i++; } return 0; }
Puedes quitar todos los bucles for que has puesto, y si te fijas, poderes[100], no lo utilizas para nada, asi que malgastas memoria, este codigo es mas simple#include <stdio.h> int main() { int usados[100] = {0}; int i=0, poderElegido=0; while(i<5) { //Pido un poder y lo voy guardando en el array 'usados' printf("Elige un poder: "); scanf("%d",&poderElegido); if(poderElegido>=0 && poderElegido<100) { if(usados[poderElegido] != 0) { printf("Ya has elegido este poder"); i = 5; //salimos del bucle si ya hemos usado ese poder } else { usados[poderElegido] = 1; } i++; } else { printf("Poder invalido\n"); } } return 0; }
Saludos
|