Y para que esta aportación no se quede en unas meras disculpas, propongo el método alternativo de generar los números por comparación con los previamente introducidos, sería para sustituir por lo que hay "encima" de estas palabras:
for( i = 0; i < 100; i++){
numeros[i]=rand() % 1000+1;
for( j = i-1; j >=0 ; j--){
if(numeros[i] == numeros[j]){
i--;
break;
}
}
}
Aunque seguro que se puede mejorar, la verdad no me termina de convencer el for con el if y el i-- con break
Se pueden evitar ambos cambiando el bucle interno y condicionando el incremento del contador. En C seria mas o menos así:
#define NUM_ELEM 1000
/* ... */
int num[NUM_ELEM];
int i;
int j;
/* ... */
i = 0;
while (i < NUM_ELEM){
num
[i
] = rand() % (NUM_ELEM
+ 1);
for (j = 0; j < i && num[j] != num[i]; j++)
;
if (i == j)
i++;
}
----
Dejo una alternativa que me parece que es más eficaz. (No recorre toda la matriz para comprobar si existe o no el valor).
Como necesitas tener todos los números del 0-99 es mejor aleatorizar la posición que el valor (Creo).
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
int main()
{
int matriz[10][10], i, j, x, y;
memset(matriz
, 0, sizeof(int)*100);
for(i=0;i<100;i++)
{
if(matriz[x][y]==0)
{
matriz[x][y]=i;
}
else
{
i--;
continue;
}
El problema es: en lugar de preocuparnos por repeticiones en los
valores ahora nos preocupamos por repeticiones en las
posiciones. Para el caso es lo mismo en el sentido de no evitar la verificación por repetidos.
----
Lamentablemente no tengo compilador en este momento y no puedo comparar, pero creo que siguiendo lo que planteaste de obtener aleatorios de 0 a 100, aunque recuerda que en realidad era "entre" 0 y 10000, el siguiente código podría ser de eficiencia/velocidad semejante.:
// ...
for (i = 0; i < 10; i++, k++){
for (j = 0; j < 10; j++, k++){
m[i][j] = n[k];
cout << m[i][j] << "\t";
}
k--;
cout << endl;
}
No es necesaria una variable para calcular la posición del array "n", en su lugar puedes calcular esta en base a los contadores de fila y columna:
// ...
for (i = 0; i < 10; i++){
for (j = 0; j < 10; j++){
m[i][j] = n[i * 10 + j];
cout << m[i][j] << "\t";
}
cout << endl;
}
Un saludo