Programación General => C/C++ => Mensaje iniciado por: Luzpy en Domingo 26 de Febrero de 2006, 01:31
Título: Problema Con Un CÓdigo En C++
Publicado por: Luzpy en Domingo 26 de Febrero de 2006, 01:31
HOLA A TODOS TENGO UN PROBLEMA CON EL SIGUIENTE CÓDIGO, LO QUE TRATO DE LOGRAR ES QUE NO SE REPITAN LOS NÚMEROS QUE CONFORMAN EL VETOR PERO NO ME ESTA FUNCIONANDO NECESITO IDEAS.
GRACIAS
#include <iostream.h> #include <iomanip.h> #include<cstdlib> #include<ctime> int main() {
srand(time(0));//establece la semilla para el generador de números aleatorios int vect[2],i,n,a;
//Genera el Vector Flag a=0; if(a==0) { for (i=0;i<=1;i++) { n=1+rand()%45; vect=n; } }
for (i=0;i<=1;i++) { if(vect==vect[i+1])
cout<<"Se repite"<<endl; a=0; }
//Imprime el Vector flag cout<<" "<<endl; for (i=0;i<2;i++) { cout<<setw(3)<<i<<setw(5)<<vect<<endl;
Título: Re: Problema Con Un CÓdigo En C++
Publicado por: Geo en Domingo 26 de Febrero de 2006, 06:23
¿Qué es lo que deseas, que no se repita el número en las posiciones del vector o que no se repita entre diferentes ejecuciones? Me parece que lo primero, es sencillo, al momento de asignar el valor a la segunda posición, checa que el valor que se va a asignar no sea igual al que está en la primera posición, si no es igual, lo asignas, si es igual, obtén un nuevo número aleatorio y prueba de nuevo.
Podría ser algo como esto:
Código: Text
n = 1 + rand() % 45;
vect[ 0 ] = n;
do {
n = 1 + rand() % 45;
} while ( n == vect[ 0 ] );
vect[ 1 ] = n;
Nota que este código solo funciona para el ejemplo de dos elementos que mostraste, si lo vas a aplicar para n elementos, tendrás que utilizar un ciclo for que recorra todas las posiciones anteriores del vector para revisar que el valor no sea repetido.
Saludos, José Jorge (Geo).
Título: Re: Problema Con Un CÓdigo En C++
Publicado por: mmoreno en Viernes 10 de Marzo de 2006, 23:12
El siguiente codigo ordena un vector de N numeros aleatorios entre 0 y 10, y elimina los duplicados. Quiza te sirve de ejemplo.
Saludos, mmoreno.
$ cat main.C #include <iostream> #include <vector> #include <cassert> #include <ctime> #include <iterator> #include <algorithm> #include <utility> #include <sstream> using namespace std; int main(int argc, char* argv[]) { assert(argv[1]); int n = 0; (istringstream(argv[1]))>>n; vector<int> v; srand(time(0)); for (int i = 0; i < n; i++) v.push_back(rand()%10); cout<<"Origen con duplicados: "; copy(v.begin(), v.end(), ostream_iterator<int>(cout, " ")); cout<<endl; sort(v.begin(), v.end()); vector<int>::iterator it = unique(v.begin(), v.end()); cout<<"Sin duplicados: "; copy(v.begin(), it, ostream_iterator<int>(cout, " ")); cout<<endl; return 0; } $ c++ main.C $ ./a.out 25 Origen con duplicados: 7 0 0 6 3 8 6 5 1 5 4 0 1 6 1 9 2 7 8 9 9 8 6 0 6 Sin duplicados: 0 1 2 3 4 5 6 7 8 9 $