comprobar numero repetido en un vector

Iniciado por MessageBoxA, 25 Junio 2014, 21:39 PM

0 Miembros y 1 Visitante están viendo este tema.

MessageBoxA

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

Código (cpp) [Seleccionar]

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;   
SI LA MATRIX FUERA PERFECTA.... ESTARÍA ESCRITA EN C++

daryo

#1
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
buenas

Risketo

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'
        printf("Elige un poder: ");
        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;
}


eferion

Intuyo que estás usando C++... comprobar valores duplicados es tan sencillo como:

opción 1:

Código (cpp) [Seleccionar]

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:

Código (cpp) [Seleccionar]

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.

MeCraniDOS

Cita de: Risketo en 25 Junio 2014, 21:54 PM


#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'
        printf("Elige un poder: ");
        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

Código (cpp) [Seleccionar]
#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
"La física es el sistema operativo del Universo"
     -- Steven R Garman