Eliminar números repetidos de un arreglo (5x5) generado con números aleatorios
Publicado por Danilo (1 intervención) el 23/06/2020 05:49:04
Estimados
Tengo este código que genera números aleatorios (entre 1 y 100) y los asigna a las posiciones de memoria de un arreglo de 5x5. Debe descartar todos los números iguales a cero, y todos los números repetidos y asignar otro hasta que no se repita ninguno. La idea es generar cartones de bingo (ver imagen), por eso la casilla del centro es la única a la que forzosamente se le asigna un cero.
El problema se encuentra en la estructura de comparación (desde la fila 37 a la 49) de los números repetidos, no logro hacer que funcione.
Ojo que al ejecutarlo sucede que a veces genera cartones sin números repetidos, lo que crea la falsa impresión de que funciona, recomiendo generar 100 cartones para que se produzca un numero repetido en mas de un cartón.
Ayuda por favor!!!

Tengo este código que genera números aleatorios (entre 1 y 100) y los asigna a las posiciones de memoria de un arreglo de 5x5. Debe descartar todos los números iguales a cero, y todos los números repetidos y asignar otro hasta que no se repita ninguno. La idea es generar cartones de bingo (ver imagen), por eso la casilla del centro es la única a la que forzosamente se le asigna un cero.
El problema se encuentra en la estructura de comparación (desde la fila 37 a la 49) de los números repetidos, no logro hacer que funcione.
Ojo que al ejecutarlo sucede que a veces genera cartones sin números repetidos, lo que crea la falsa impresión de que funciona, recomiendo generar 100 cartones para que se produzca un numero repetido en mas de un cartón.
Ayuda por favor!!!

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
# include <iostream>
# include <cstdlib>
# include <time.h>
# include <conio.h>
using namespace std;
int i,j,b,v,k,r,s,bingo[5][5],cartones;
int main()
{
srand (time (NULL)); // inicializa el generador de n° aleatorios
cantidad:
cout << "¿Cuantos cartones desea imprimir? (maximo 100): ";
cin >> cartones;
if (cartones>100 or cartones<1) // valida que el numero de cartones este entre 1 y 100
{
cout << endl << "¡¡Ingrese un numero valido de cartones!!" << endl << endl;
goto cantidad; // devuelve al ingreso de cantidad de cartones
}
for(k=0;k<cartones;k++) // cuenta los cartones impresos
{
for(i=0;i<5;i++) // genera las filas para recorrer cada indice del arreglo
{
for(j=0;j<5;j++) // genera las columnas para recorrer cada indice del arreglo
{
if (i==2 and j==2) // detecta cuando estamos en el indice 12, corresponde al cuadrado central del carton
{
bingo[i][j] = 0; // le asigna un cero, es una forma de dejarlo vacio
}
else // para todos los demas casos asignara un n° aleatorio
{
asignacion:
bingo[i][j]=rand()%101; // asigna un n° aleatorio a cada indice del arreglo
if (i>0 or j>0) // comenzara a comparar cuando tenga 2 ingresos como minimo
{
for(b=0;b<i;b++) // hace un barrido comparando las filas
{
for(v=0;v<j;v++) // hace un barrido comparando las columnas
{
if (bingo[i][j] == bingo[b][v] or bingo[i][j] == 0) // detecta n° repetidos o =0 y obliga a asignar otro n°
{
goto asignacion;
}
}
}
} // el problema esta desde la fila 37 a la 49
}
}
}
for(r=0;r<5;r++)
{
for(s=0;s<5;s++)
{
cout << bingo[r][s] << " ";
}
cout << endl;
}
cout << endl << endl;
}
}
Valora esta pregunta


0